gpt4 book ai didi

ios - UINavigationController subview 在隐藏/显示导航栏后不会回来

转载 作者:行者123 更新时间:2023-12-01 16:35:30 25 4
gpt4 key购买 nike

我正在努力处理我的导航 Controller 的 subview ,其位置和尺寸都限制在导航栏上。当我隐藏导航栏时, subview 消失(预期行为)。但是当我将导航栏带回来时, subview 并没有跟随。

此 subview 只是导航栏顶部的进度 View (我根据某些任务的进度填充颜色的自定义 UIView)。

进度 View 的定位在我的 UINavigationController 子类的 viewDidLoad 中设置了约束:

 - (void) viewDidLoad{

// The dimensions here are totally arbitrary since they are going to be defined automatically by the constraints
_progressView = [[CRProgressView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

[self.view addSubview:_progressView];

UINavigationBar *navBar = [self navigationBar];

[self.view addConstraint: [NSLayoutConstraint constraintWithItem:_progressView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:navBar
attribute:NSLayoutAttributeBottom
multiplier:1
constant:0]];

[self.view addConstraint: [NSLayoutConstraint constraintWithItem:_progressView
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:navBar
attribute:NSLayoutAttributeLeft
multiplier:1
constant:0]];

[self.view addConstraint: [NSLayoutConstraint constraintWithItem:_progressView
attribute:NSLayoutAttributeRight
relatedBy:NSLayoutRelationEqual
toItem:navBar
attribute:NSLayoutAttributeRight
multiplier:1
constant:0]];

[self.view addConstraint: [NSLayoutConstraint constraintWithItem:_progressView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:navBar
attribute:NSLayoutAttributeHeight
multiplier:0
constant:2]];

[_progressView setTranslatesAutoresizingMaskIntoConstraints:NO];
}

从这里一切看起来都很好,但在某些时候,在导航 Controller 中显示的 collectionView 中,我调用 [self.navigationController setNavigationBarHidden:YES animated:YES] 来清除屏幕并在用户在 Collection View 中向下滚动时获得额外空间。

如果用户向上滚动,我会向后显示导航栏,但此处显示的导航栏没有进度 View 。

这是用于在 collectionView 中显示和隐藏导航栏的代码,但我认为问题不是来自这里。它正确隐藏并显示了 navigationBar :
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{

if (scrollView.contentOffset.y >= 0 && scrollView.contentOffset.y <= scrollView.contentSize.height - self.view.frame.size.height) {
if (self.lastContentOffsetY > scrollView.contentOffset.y) {
//Show navigation bar
if (self.navigationController.navigationBarHidden) {
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
}
else if (self.lastContentOffsetY < scrollView.contentOffset.y) {

if (!self.navigationController.navigationBarHidden) {
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
}

self.lastContentOffsetY = scrollView.contentOffset.y;
}
}

我不明白为什么当我调用 [self.navigationController setNavigationBarHidden:NO animated:YES] 时进度 View 没有返回导航栏。

任何帮助将不胜感激。提前致谢。

最佳答案

我不确定它是否在您的情况下 100% 有效,但您可以尝试插入此覆盖方法:

- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated{
[super setNavigationBarHidden:hidden animated: animated];
[self layoutIfNeeded];
}

关于ios - UINavigationController subview 在隐藏/显示导航栏后不会回来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28656136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com