Ios UINavigationController子视图未滚动

Ios UINavigationController子视图未滚动,ios,objective-c,uiview,uinavigationcontroller,uinavigationbar,Ios,Objective C,Uiview,Uinavigationcontroller,Uinavigationbar,我有一个导航控制器和一个视图,我将其连接到导航控制器的子视图,我在向上滑动时使用下面的代码隐藏导航栏 [self.navigationController.view addSubview: categoryView]; self.navigationController.hidesBarsOnSwipe = YES; 它在向上滑动tableview时隐藏在顶部,但我希望子视图应随导航控制器一起向上移动,并且应适合顶部,而向下滑动导航栏应随子视图一起向下移动 我试过这个 [sel

我有一个导航控制器和一个视图,我将其连接到导航控制器的子视图,我在向上滑动时使用下面的代码隐藏导航栏

    [self.navigationController.view addSubview: categoryView];
    self.navigationController.hidesBarsOnSwipe = YES;
它在向上滑动tableview时隐藏在顶部,但我希望子视图应随导航控制器一起向上移动,并且应适合顶部,而向下滑动导航栏应随子视图一起向下移动

我试过这个

[self.navigationController.navigationBar addSubview:categoryView];

在这种情况下,导航栏和子视图都隐藏在顶部。我想会有一些简单的解决办法,我搜索了很多,但没有找到一个完美的。我也尝试了一些库,它们不适合iPhoneX,并且在iOS11中存在一些问题

更新:为问题添加图像 及

viewDidLoad

[self.navigationController setNavigationBarHidden:YES];

func-scrollViewDidScroll(\uScrollView:UIScrollView){

如果scrollView.contentOffset.y使用自定义视图作为标题视图,而不是使用导航栏(使导航栏隐藏)。现在为标题视图提供约束(高度约束)。当您滚动表格视图时,将调用方法
-scrollViewDidScroll
。如果scrollview的内容偏移量大于0,请检查其内容偏移量

headerView.heightconstraint-=scrollViewContentoffset.y;

编辑:

可以将子视图添加到视图中,并对安全区域进行约束

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

if(scrollView.contentOffset.y遵循Brian Voong在LetsBuildThatApp Youtube频道上的精彩教程。他用大量细节解释了您所指的相同功能



希望这有帮助。

我想你想隐藏导航controller@R.Mohanyes,当向上滚动tableview时,它应该隐藏。当我向下滚动tableview时,它应该是可见的。首选此链接我认为它应该对您有帮助。它不起作用,我用图像更新了我的问题,请检查它。如果您得到任何其他解决方案,请建议谢谢。您是否检查了
[self.navigationController setNavigationBarHidden:否];
[self.navigationController setNavigationBarHidden:是]
被调用?是的,我检查了它,我得到的结果与我问题中的代码相同,我希望黄色子视图与导航栏一起移动。您需要类似于否的内容,而不是那样的内容,我需要类似于TLYShyNavBar库的内容,它有一个扩展视图。我尝试了它,但它不适用于所有屏幕。@jonsnow目前我正在使用ng AMScrollingNavbar objc文件,但它不适合iPhone X,这就是为什么我要手动尝试的原因。我使用的是CAPS页面菜单(您的类别视图)。headerView和菜单视图之间的底部约束为0。我以前也尝试过capspagemenu,但遇到了内存和性能问题,这就是为什么现在将SwipeView与HTHorizontalSelectionList一起使用。好的,我将尝试上述建议,并让您知道结果@bhanu matta,谢谢。headerView.heightconstraint这可能吗,我正在尝试现在就可以了。我需要在导航栏下方显示/附加一个视图,该视图还应随导航栏一起滚动并隐藏,同时向上滑动,向下滑动时导航栏应向下滑动。@Josshad抱歉,误解了这个问题。您必须查看安全区域。更新了答案和示例。哇,它简单而漂亮+1,是吗可以通过编程方式实现吗?因为我有一个子视图。您可以阅读文章,其中描述了如何通过编程方式将约束添加到安全区域()。或者您可以使用IB支持的库:Thank You@Josshad我将尝试您提到的所有建议。我给了您奖励:)谢谢你的建议,我想知道我指的地方有很多细节。无论是在我的问题中还是在评论中。我说过那个教程的老师会在他的教程视频中提到很多细节。我没有提到你。哦,好的,我会检查一下。
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];
                 }];