UINavigationBar大标题模式下searchBar无法正常显示问题求助
解决方案
- 给自定义下拉按钮显式设置尺寸约束
UIBarButtonItem的customView不会自动适配内容尺寸,你用SnapKit可以直接在初始化按钮时添加约束,数值可根据你的按钮实际内容调整,参考代码:lazy var button = UIDropDownButton().then { // 新增宽高约束 $0.snp.makeConstraints { make in make.width.equalTo(90) make.height.equalTo(32) } $0.setAction().subscribe(onNext: { switch $0 { case .popularity: break // 人气排序代码 case .suggestion: break // 推荐排序代码 case .lowestPrice: break // 最低价格排序代码 } }) .disposed(by: disposeBag) } - 删除
viewWillAppear中的重复导航栏设置代码
你当前在viewDidLoad和viewWillAppear中重复调用setNavigationBar(),会重复生成并赋值rightBarButtonItem、searchController,引发布局冲突,只保留viewDidLoad中的调用即可。 - 如果按钮位置存在偏移,可添加容器视图修正
自定义customView在导航栏中默认对齐方式可能不符合预期,外层套一层容器视图调整边距即可:lazy var barButtonItem: UIBarButtonItem = { let container = UIView() container.addSubview(button) button.snp.makeConstraints { make in make.centerY.equalToSuperview() make.trailing.equalToSuperview().offset(-4) // 根据需要调整右边距 make.width.height.equalTo(button.intrinsicContentSize) } container.snp.makeConstraints { make in make.size.equalTo(CGSize(width: 94, height: 32)) } return UIBarButtonItem(customView: container) }() - 补充searchController的必要配置
大标题模式下默认搜索栏会折叠在导航栏顶部,可显式添加配置避免异常:private func setNavigationBar() { setLargeTitleNavigationBar(title: "产品") self.navigationItem.rightBarButtonItem = barButtonItem let searchController = UISearchController(searchResultsController: nil) searchController.searchResultsUpdater = self // 按需设置代理 self.navigationItem.searchController = searchController self.navigationItem.hidesSearchBarWhenScrolling = true // 滚动时隐藏搜索栏 } - 可选修正:你扩展中的
setBackButon()存在拼写错误,正确应为setBackButton(),如果是自定义方法注意检查实现是否有问题。
内容的提问来源于stack exchange,提问作者장서영
相关产品推荐
相关产品推荐

