Code: Select all
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]
navigationItem.rightBarButtonItems = views.map { v in
v.anchor(to: CGSizeMake(12, 12))
let item = UIBarButtonItem(customView: v)
if #available(iOS 26.0, *) {
item.hidesSharedBackground = true
}
return item
}
}
}
extension UIView {
func anchor(to size: CGSize) {
translatesAutoresizingMaskIntoConstraints = false
let constraints = [
heightAnchor.constraint(equalToConstant: size.height),
widthAnchor.constraint(equalToConstant: size.width)
]
NSLayoutConstraint.activate(constraints)
}
}
Unter iOS 18 wird die Größe korrekt aktualisiert:

Unter iOS 26 scheint jedoch nur die Höhe berücksichtigt zu werden, nicht aber die Breite.

Beachten Sie außerdem, dass der horizontale Abstand zwischen den einzelnen Elementen unter iOS 26 größer ist als unter iOS 18.
Wie kann ich beides beibehalten? Meine Größen und Lücken unter iOS 26, damit es genauso aussieht wie iOS 18?
Mobile version