Swift 4:如何解决无法通过编程修改自定义导航栏高度的问题?
嘿,我之前也踩过自定义导航栏高度改不动的坑!给你几个亲测有效的解决思路:
重写导航栏的
sizeThatFits方法
这是最直接的方式,告诉系统导航栏的理想尺寸。在自定义导航栏类里加上这段代码:class CustomNavigationBar: UINavigationBar { override func sizeThatFits(_ size: CGSize) -> CGSize { // 把80改成你想要的高度值 return CGSize(width: UIScreen.main.bounds.width, height: 80) } }这个方法会覆盖系统默认的尺寸计算逻辑,适合替换系统导航栏的场景。
用Auto Layout强制锁定高度
如果你的自定义导航栏是作为子视图添加到ViewController里的,直接给它加上高度约束:let customNavBar = CustomNavigationBar() customNavBar.translatesAutoresizingMaskIntoConstraints = false view.addSubview(customNavBar) NSLayoutConstraint.activate([ customNavBar.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), customNavBar.leadingAnchor.constraint(equalTo: view.leadingAnchor), customNavBar.trailingAnchor.constraint(equalTo: view.trailingAnchor), customNavBar.heightAnchor.constraint(equalToConstant: 80) ])记得一定要把
translatesAutoresizingMaskIntoConstraints设为false,不然自定义约束会和系统自动布局规则冲突。注意系统导航栏的透明属性
如果你是基于系统UINavigationBar做自定义,别忘了把isTranslucent设为false——透明状态下系统会自动调整导航栏的高度和布局,导致你设置的高度不生效:navigationController?.navigationBar.isTranslucent = false
另外提个小细节:iOS13之后导航栏的内部结构有变化,如果你的自定义导航栏里嵌套了子视图,也要给子视图正确设置约束,避免被挤压变形。
内容的提问来源于stack exchange,提问作者Chandler Long
相关产品推荐
相关产品推荐

