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

时间:2019-02-21 06:08:45

标签: ios swift uinavigationbar uinavigation

从大标题页面滑动到小标题页面时,出现导航间隙! enter image description here

2 个答案:

答案 0 :(得分:0)

请确保您只需要检查从情节提要中选择的半透明

enter image description here

像这样设置代码

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
    }
}

缺席:

enter image description here

答案 1 :(得分:0)

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

要解决此问题,控制器视图的布局应从屏幕的零点开始,子视图的布局应从导航栏的底部开始,以防止被遮盖。

两个属性可以影响布局:半透明 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 中找到。

如果最顶部的视图是从UIScrollView继承的,例如 mainTableView ,则可以将其布局设置为从零点开始,并将其 contentInset 设置为导航的底部酒吧。它看起来像UITableViewController,并且滚动 mainsTableView 时导航栏会更改,没有任何空格。示例代码如下,

- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.mainTableView.contentInset = UIEdgeInsetsMake(NORMAL_STATUS_AND_NAV_BAR_HEIGHT, 0, 0, 0);
}