https://ibb.co/98hC3rc )
注意:我有一个默认的导航后栏按钮和一个自定义的右栏按钮项目。
translatesAutoresizingMaskIntoConstraints
标志,但它不起作用。
class ProfileVC: UIViewController {
override func viewWillAppear(_ animated: Bool) {
let searchBox = SearchView(frame: .zero)
self.navigationItem.titleView = searchBox
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Add", style: .plain, target: nil, action: nil)
}
}
class SearchView: UIView {
override var intrinsicContentSize: CGSize {
return UIView.layoutFittingExpandedSize
}
}
有人能帮我解决这个标题视图闪烁的问题吗? 预先感谢!
viewWillDisappear:
开始,到
viewWillAppear:
结束。 步骤1:交互开始时(即在
translatesAutoresizingMaskIntoConstraints
中)打开导航标题视图的
viewWillDisappear:
,使标题视图的宽度和位置保持不变。 步骤 2:当交互停止时(即在
translatesAutoresizingMaskIntoConstraints
中)关闭导航标题视图的
viewWillAppear:
,以便现有约束将按原样工作。
titleView
何时添加到超级视图,然后设置约束(尽管确保只执行一次)。
class SearchView: UIView {}
)
intrinsicContentSize
(您可能依赖于
UIView.layoutFittingExpandedSize
,但也可以 例如,在 iOS 15 和 iOS 16 上不同,然后具有相同的 您将需要依赖左/右页边距
UIScreen.main.bounds
。)
SearchTitleView
的 ViewController 中,您需要将自定义
translatesAutoresizingMaskIntoConstraints
的
searchTitleView
设置为 true/false,以防止跳转和重叠导航栏按钮项目,如下所示:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
searchTitleView.translatesAutoresizingMaskIntoConstraints = false
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
searchTitleView.translatesAutoresizingMaskIntoConstraints = true
}
最后,如果没有你和我的问题,它看起来会更好。