Anonymous
Положение панели навигации iOS 26 ниже, чем в iOS 18 в ландшафтном режиме.
Сообщение
Anonymous » 03 дек 2025, 04:02
Мое приложение просто содержит панель навигации, и обратите внимание, что в iOS 26 она отображается ниже, чем ожидалось. Как вы можете видеть на скриншоте, он расположен на 24 пт вниз. Однако в iOS 18 панель навигации расположена вверху.
Версия для iOS 26 занимает слишком много места на экране и выглядит не очень хорошо. Как я могу изменить его, чтобы оно соответствовало поведению iOS 18?
Вот минимальный код воспроизведения:
Код: Выделить всё
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let w: CGFloat = 64
let h: CGFloat = 64
let v1 = UIView(frame: CGRectMake(0, 0, w, h))
let v2 = UIView(frame: CGRectMake(0, 0, w, h))
let v3 = UIView(frame: CGRectMake(0, 0, w, h))
let v4 = UIView(frame: CGRectMake(0, 0, w, h))
let v5 = UIView(frame: CGRectMake(0, 0, w, h))
let v6 = UIView(frame: CGRectMake(0, 0, w, h))
v1.backgroundColor = .red
v2.backgroundColor = .green
v3.backgroundColor = .yellow
v4.backgroundColor = .gray
v5.backgroundColor = .cyan
v6.backgroundColor = .purple
let views: [UIView] = [v1, v2, v3, v4, v5, v6]
let gap: CGFloat = 16
let width: CGFloat = 32
let height: CGFloat = 32
let totalWidth: CGFloat = width * CGFloat(views.count) + gap * CGFloat(views.count-1)
let container = UIView(frame: CGRectMake(0, 0, totalWidth, height))
container.widthAnchor.constraint(equalToConstant: totalWidth).isActive = true
for (i, view) in views.enumerated() {
view.translatesAutoresizingMaskIntoConstraints = false
container.addSubview(view)
NSLayoutConstraint.activate([
view.widthAnchor.constraint(equalToConstant: width),
view.heightAnchor.constraint(equalToConstant: height), // match container
view.centerYAnchor.constraint(equalTo: container.centerYAnchor),
view.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: CGFloat(i) * (width + gap))
])
}
let containerItem = UIBarButtonItem(customView: container)
if #available(iOS 26.0, *) {
containerItem.hidesSharedBackground = true
}
navigationItem.rightBarButtonItem = containerItem
}
}
extension UIView {
func anchor(to size: CGSize) {
translatesAutoresizingMaskIntoConstraints = false
let constraints = [
heightAnchor.constraint(equalToConstant: size.height),
widthAnchor.constraint(equalToConstant: size.width)
]
for constraint in constraints {
constraint.priority = UILayoutPriority(rawValue: 1000)
}
NSLayoutConstraint.activate(constraints)
}
}
В iOS 26 (см. пробел):
В iOS 18 (без пробела):
Обратите внимание, что в приложении Safari для iOS 26 этого пробела нет:
Подробнее здесь:
https://stackoverflow.com/questions/798 ... ndscape-mo
1764723724
Anonymous
Мое приложение просто содержит панель навигации, и обратите внимание, что в iOS 26 она отображается ниже, чем ожидалось. Как вы можете видеть на скриншоте, он расположен на 24 пт вниз. Однако в iOS 18 панель навигации расположена вверху. Версия для iOS 26 занимает слишком много места на экране и выглядит не очень хорошо. Как я могу изменить его, чтобы оно соответствовало поведению iOS 18? Вот минимальный код воспроизведения: [code] import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. let w: CGFloat = 64 let h: CGFloat = 64 let v1 = UIView(frame: CGRectMake(0, 0, w, h)) let v2 = UIView(frame: CGRectMake(0, 0, w, h)) let v3 = UIView(frame: CGRectMake(0, 0, w, h)) let v4 = UIView(frame: CGRectMake(0, 0, w, h)) let v5 = UIView(frame: CGRectMake(0, 0, w, h)) let v6 = UIView(frame: CGRectMake(0, 0, w, h)) v1.backgroundColor = .red v2.backgroundColor = .green v3.backgroundColor = .yellow v4.backgroundColor = .gray v5.backgroundColor = .cyan v6.backgroundColor = .purple let views: [UIView] = [v1, v2, v3, v4, v5, v6] let gap: CGFloat = 16 let width: CGFloat = 32 let height: CGFloat = 32 let totalWidth: CGFloat = width * CGFloat(views.count) + gap * CGFloat(views.count-1) let container = UIView(frame: CGRectMake(0, 0, totalWidth, height)) container.widthAnchor.constraint(equalToConstant: totalWidth).isActive = true for (i, view) in views.enumerated() { view.translatesAutoresizingMaskIntoConstraints = false container.addSubview(view) NSLayoutConstraint.activate([ view.widthAnchor.constraint(equalToConstant: width), view.heightAnchor.constraint(equalToConstant: height), // match container view.centerYAnchor.constraint(equalTo: container.centerYAnchor), view.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: CGFloat(i) * (width + gap)) ]) } let containerItem = UIBarButtonItem(customView: container) if #available(iOS 26.0, *) { containerItem.hidesSharedBackground = true } navigationItem.rightBarButtonItem = containerItem } } extension UIView { func anchor(to size: CGSize) { translatesAutoresizingMaskIntoConstraints = false let constraints = [ heightAnchor.constraint(equalToConstant: size.height), widthAnchor.constraint(equalToConstant: size.width) ] for constraint in constraints { constraint.priority = UILayoutPriority(rawValue: 1000) } NSLayoutConstraint.activate(constraints) } } [/code] В iOS 26 (см. пробел): [img]https://i.sstatic.net/pB6LRYPf.png[/img] В iOS 18 (без пробела): [img]https://i.sstatic.net/4jAxVfLj.png[/img] Обратите внимание, что в приложении Safari для iOS 26 этого пробела нет: [img]https://i.sstatic.net/jy8rx3VF.png[/img] Подробнее здесь: [url]https://stackoverflow.com/questions/79833675/ios-26-navigation-bars-position-is-positioned-lower-than-ios-18-in-landscape-mo[/url]