当我使用 iOS 16 创建最简单的 titleView 并将其添加到 navigationItem 时,我看到一个无法以任何方式删除的额外空间。我在 iOS 15 上没有这个问题,有人知道可以做什么吗?
我试图解决的问题是 titleView 包含一个在 iOS 16 上未对齐的标签。该标签位于 titleView 的最左侧并且
我附上了 iPhone 13 Pro Max 的屏幕截图 - 左边是 iOS 16,右边是 iOS 15:
我有一个包含在导航控制器中的视图控制器,这是视图控制器中的唯一代码
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.titleView = UIView(frame: CGRect(x: 0, y: 0, width: 404, height: 40))
view.backgroundColor = .lightGray
titleView.backgroundColor = .red
}
}
navigationItem.titleView的框架:
iOS 15: iPhone 13 Pro Max: <UIView: 0x7f85fda14d10; frame = (0 0; 404 40);>
iOS 16: iPhone 13 Pro Max: <UIView: 0x7f7894f157e0; frame = (0 0; 388 40);>
我尝试过删除插图、边距、更改宽度、更改设置视图的位置,但没有任何效果,我没有主意了
我也遇到了问题,但我找到了解决方案:
TitleView
intrinsicContentSize
override var intrinsicContentSize: CGSize {
return CGSize(width: UIScreen.main.bounds.width - (left/right margin),
height: (fixed height) )
}
所以你不会依赖
UIView.layoutFittingExpandedSize
宽度/高度,而是依赖于你的具体宽度/高度。
如果您只想使其全宽(如您的屏幕截图),您可以使用
UIScreen.main.bounds.width
。
如果您想在 iOS 15 和 iOS 16+ 上具有相同的左/右边距,您可以制作
UIScreen.main.bounds.width - (left/right margin)
。
以下是修复前后问题的 UI 概述: