从大标题页过渡到小标题页时出现导航间隙
Posted
技术标签:
【中文标题】从大标题页过渡到小标题页时出现导航间隙【英文标题】:Navigation gap appears When transition from Large title Page to small Title Page 【发布时间】:2019-02-21 06:08:45 【问题描述】:从大标题页滑动到小标题页时出现导航间隙!
【问题讨论】:
【参考方案1】:视图的布局从导航栏的底部开始。从大标题页过渡到小标题页时,导航栏变短,出现导航间隙。
为了解决这个问题,控制器视图的布局应该从屏幕的零点开始,它的子视图的布局应该从导航栏的底部开始,以防止被覆盖。
两个属性可以影响布局:translucent 和 edgesForExtendedLayout。 半透明属性应该设置为YES,或者到处删除(它的默认值为YES)。 edgeForExtendedLayout 属性要设置为 UIRectEdgeAll,或者处处删除(默认值为 UIRectEdgeAll)。
对于UITableViewController的页面,会自动调整到导航栏(tableview的adjustedContentInset会发生变化,前提是contentInsetAdjustmentBehavior设置为UIScrollViewContentInsetAdjustmentAutomatic,或者删除设置),任何其他代码都不应更改。
对于 UIViewController,主视图的子视图应该将其布局调整到导航栏的底部。示例代码如,
- (void)viewDidLayoutSubviews
[super viewDidLayoutSubviews];
self.searchBgTopLayoutConstraint.constant = NORMAL_STATUS_AND_NAV_BAR_HEIGHT;
#top constraint of the top most view
如果子视图的第一个视图(A)继承自UIScrollView,大标题会随着A的滚动而变化。详情可见Shrink large title when scrolling (not UITableViewController) ios 11 。
如果最顶层的view继承自UIScrollView,比如mainTableView,你可以设置它的布局从零点开始,将它的contentInset设置到导航的底部酒吧。它看起来像一个 UITableViewController,并且导航栏在 mainsTableView 滚动时发生变化,没有任何空白。示例代码如,
- (void)viewDidLayoutSubviews
[super viewDidLayoutSubviews];
self.mainTableView.contentInset = UIEdgeInsetsMake(NORMAL_STATUS_AND_NAV_BAR_HEIGHT, 0, 0, 0);
【讨论】:
【参考方案2】:确保,您只需要检查从情节提要中选择的半透明。
这样设置代码
override func viewWillAppear(_ animated: Bool)
if #available(iOS 11.0, *)
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationItem.largeTitleDisplayMode = .automatic // Change Display Mode
else
// Fallback on earlier versions
输出:
【讨论】:
以上是关于从大标题页过渡到小标题页时出现导航间隙的主要内容,如果未能解决你的问题,请参考以下文章