iOS 16 导航项中额外的空白空间

问题描述 投票:0回答:1

当我使用 iOS 16 创建最简单的 titleView 并将其添加到 navigationItem 时,我看到一个无法以任何方式删除的额外空间。我在 iOS 15 上没有这个问题,有人知道可以做什么吗?

我试图解决的问题是 titleView 包含一个在 iOS 16 上未对齐的标签。该标签位于 titleView 的最左侧并且

  • 在 iOS 15 上,titleView 本身距离屏幕左右角 12 个点
  • 但在 iOS 16 上,titleView 距离屏幕左右角 20 点,不幸的是,这破坏了所需的设计

我附上了 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);>

我尝试过删除插图、边距、更改宽度、更改设置视图的位置,但没有任何效果,我没有主意了

ios uinavigationbar uinavigationitem ios16 titleview
1个回答
0
投票

我也遇到了问题,但我找到了解决方案:

  1. 您需要为
    TitleView
  2. 创建自己的课程
  3. 您需要覆盖
    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 概述:

© www.soinside.com 2019 - 2024. All rights reserved.