从大标题页过渡到小标题页时出现导航间隙

Posted

技术标签:

【中文标题】从大标题页过渡到小标题页时出现导航间隙【英文标题】:Navigation gap appears When transition from Large title Page to small Title Page 【发布时间】:2019-02-21 06:08:45 【问题描述】:

从大标题页滑动到小标题页时出现导航间隙!

【问题讨论】:

【参考方案1】:

视图的布局从导航栏的底部开始。从大标题页过渡到小标题页时,导航栏变短,出现导航间隙。

为了解决这个问题,控制器视图的布局应该从屏幕的零点开始,它的子视图的布局应该从导航栏的底部开始,以防止被覆盖。

两个属性可以影响布局:translucentedgesForExtendedLayout。 半透明属性应该设置为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
    

输出:

【讨论】:

以上是关于从大标题页过渡到小标题页时出现导航间隙的主要内容,如果未能解决你的问题,请参考以下文章

为我的应用提供服务时出现空白页(Vue Router 4 - Vue 3)

在底部导航栏上推送新屏幕时出现颤振过渡动画问题

移动到报告的下一页时出现“缺少参数值”错误

当我在本地机器上运行或调试 MVC 应用程序时出现空白页

无限滚动在向下滚动到下一页时出现模板错误

在 React Native Expo 中将项目渲染到底页时出现类型错误