UISplitViewController:DetailViewController中的titleView在横向方向上消失了,这是预期的行为吗?

时间:2019-05-15 08:02:41

标签: ios swift uikit uisplitviewcontroller

我正在使用titleView的主/详细VC在导航栏中添加自定义navigationItem.titleView。将设备的方向更改为横向时,titleView下的MasterViewController可以正常工作,但是对于DetailViewController titleView消失了。在将方向更改回纵向titleView时,会再次出现DetailViewController。我还附加了源代码和视频的链接。

这是预期的行为,还是我是在犯错,还是苹果公司是个问题?

//Custom Title View:
class TitleView: UIView {
    override func sizeThatFits(_ size: CGSize) -> CGSize {
        return CGSize(width: 50, height: 20)
    }
}

class DetailViewController: UIViewController {
    override func viewDidLoad() {
       super.viewDidLoad()
       //Adding titleView for Master/Detail VC:
       navigationItem.titleView = {
            //Setting frame size here, did not make any difference
            let view = TitleView(frame: .zero)
            view.backgroundColor = .red
            return view
       }()
    }
}

此处是完整的源代码:https://github.com/avitron01/SplitViewControllerIssue/tree/master/MathMonsters

突出显示该问题的视频: https://vimeo.com/336288580

2 个答案:

答案 0 :(得分:0)

我有同样的问题。似乎是一个iOS错误。我的解决方法是在每个视图布局上重新分配标题视图。我在DetailViewController中使用了这段代码:

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    if let v = navigationItem.titleView {
        navigationItem.titleView = nil
        navigationItem.titleView = v
    }
}

答案 1 :(得分:0)

对于那些偶然发现这一点的人,另请参阅 iOS 11 navigationItem.titleView Width Not Set。基本上,有两种建议的解决方法:

  • 使用自定义 UIView 告诉 iOS 使用 UIView.layoutFittingExpandedSize 将其 intrinsicContentSize 处理得尽可能大
  • 使用 widthAnchor/heightAnchor 约束来设置视图的宽度和高度