我有导航控制器和视图,我附加到导航控制器的子视图,我使用下面的代码在向上滑动时隐藏导航栏
[self.navigationController.view addSubview: categoryView];
self.navigationController.hidesBarsOnSwipe = YES;
它在向上滑动桌面时隐藏到顶部,但我希望该子视图应该与导航控制器一起向上移动,它应该适合顶部,而向下滑动导航栏应该与子视图一起下降。 / p>
我试过这个
[self.navigationController.navigationBar addSubview: categoryView];
在这个中,navigationBar和子视图都隐藏在顶部。我想一些简单的解决方案就在那里,我搜索了很多,但没有找到一个完美的解决方案。我也尝试了一些库,这些库不适合iPhone X并且在iOS 11中存在一些问题。
更新:为问题before scrolling添加图片 和 after scrolling the tableview
答案 0 :(得分:1)
编辑:
您可以使用安全区域的约束将子视图添加到视图中。
F.e。以编程方式:
self.headerView.translatesAutoresizingMaskIntoConstraints = NO;
self.tableView.translatesAutoresizingMaskIntoConstraints = NO;
if (@available(iOS 11.0, *)) {
self.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
UILayoutGuide *guide = self.view.safeAreaLayoutGuide;
[NSLayoutConstraint activateConstraints:@[
[self.headerView.topAnchor constraintEqualToAnchor:self.view.topAnchor constant:0],
[self.headerView.bottomAnchor constraintEqualToAnchor:guide.topAnchor constant:64],
[self.headerView.leftAnchor constraintEqualToAnchor:self.view.leftAnchor constant:0],
[self.headerView.rightAnchor constraintEqualToAnchor:self.view.rightAnchor constant:0]
]];
[NSLayoutConstraint activateConstraints:@[
[self.tableView.topAnchor constraintEqualToAnchor:self.headerView.bottomAnchor constant:0],
[self.tableView.leftAnchor constraintEqualToAnchor:self.view.leftAnchor constant:0],
[self.tableView.rightAnchor constraintEqualToAnchor:self.view.rightAnchor constant:0],
[self.tableView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor constant:0]
]];
}
要在滚动时显示/隐藏导航栏,您可以使用:
if (scrollView.contentOffset.y <= 0) {
[self.navigationController setNavigationBarHidden:NO animated: YES];
} else {
[self.navigationController setNavigationBarHidden:YES animated: YES];
}
[UIView animateWithDuration:[CATransaction animationDuration]
animations:^{
[self.view layoutIfNeeded];
}];
答案 1 :(得分:0)
在viewDidLoad
[self.navigationController setNavigationBarHidden:YES];
答案 2 :(得分:0)
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y <= 0 {
[self.navigationController setNavigationBarHidden:NO];
} else {
[self.navigationController setNavigationBarHidden:YES];
}
}
试试这个。
答案 3 :(得分:0)
使用自定义视图作为标题视图而不是使用导航栏(隐藏导航栏)。现在为标题View(高度约束)提供约束。滚动表格视图时,将调用方法-scrollViewDidScroll
。检查scrollview的内容偏移量,如果它大于0。
headerView.heightconstraint -= scrollViewContentoffset.y;
答案 4 :(得分:0)
在LetsBuildThatApp Youtube频道上关注Brian Voong的精彩教程。他用可怕的细节解释了你所指的相同功能。
希望这会有所帮助..