prefersLargeTitles触发约束冲突,自定义标题字体与颜色失效求助
解决导航栏大标题的约束冲突与样式不生效问题
嘿,我来帮你搞定这两个头疼的问题!咱们一个个来拆解:
1. 约束冲突(Unable to simultaneously satisfy constraints)
启用prefersLargeTitles后,导航栏的高度会动态变化(大标题状态下比普通标题更高),如果你的表格或视图的顶部约束是直接连到superview.top而非安全区域(safeAreaLayoutGuide),就很容易触发约束冲突。
解决方案:
- 把所有视图/表格的顶部约束,从
superview.top改成safeAreaLayoutGuide.top - 代码层面:用
view.safeAreaLayoutGuide.topAnchor代替view.topAnchor来创建约束;如果是Storyboard/XIB操作,直接在约束面板里选择Safe Area作为参照对象。
2. 大标题字体&颜色不生效
你现在只设置了titleTextAttributes,但这个属性是给普通尺寸的导航标题用的!启用大标题后,必须单独设置largeTitleTextAttributes才会生效。另外还要确认字体是否正确导入到项目中。
具体步骤:
第一步:修正代码,添加大标题样式设置
把你的导航栏自定义代码改成这样:
navigationController?.navigationBar.prefersLargeTitles = true self.navigationController?.navigationBar.topItem?.title = "LaViva Hotel" // 导航栏基础样式 navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default) navigationController?.navigationBar.shadowImage = UIImage() navigationController?.hidesBarsOnSwipe = true // 自定义样式(同时覆盖普通标题和大标题) if let customFont = UIFont(name: "Rubik-Medium", size: 40.0) { let textAttributes: [NSAttributedString.Key: Any] = [ .foregroundColor: UIColor(red: 200/255, green: 70/255, blue: 70/255, alpha: 1), .font: customFont ] // 普通标题样式 self.navigationController?.navigationBar.titleTextAttributes = textAttributes // 大标题样式(关键!之前缺失的部分) self.navigationController?.navigationBar.largeTitleTextAttributes = textAttributes }
第二步:确认字体导入正确
如果字体还是不生效,检查这几点:
- 拖入Xcode的
Rubik-Medium字体文件(比如Rubik-Medium.ttf),要勾选对应的App target(确保字体被添加到编译目标里) - 在
Info.plist中添加Fonts provided by application数组键,把字体的完整文件名(包括后缀)加入数组,比如Rubik-Medium.ttf - 可以用
print(UIFont.familyNames)打印所有可用字体,确认Rubik家族存在,且字体内部名称确实是Rubik-Medium(部分字体的内部名称和文件名可能不一致)
按上面的方法调整后,约束冲突和样式不生效的问题应该就能解决啦!
内容的提问来源于stack exchange,提问作者multiverse
相关产品推荐
相关产品推荐

