【问题标题】:UIViewController hidesBottomBarWhenPushed puts the UIView in the wrong place during push/pop animationUIViewController hidesBottomBarWhenPushed 在推送/弹出动画期间将 UIView 放置在错误的位置
【发布时间】:2013-01-24 00:41:06
【问题描述】:

UINavigationController 中有两个 UIViewControllers。最上面的hidesBottomBarWhenPushed 设置为YES。当我推最顶部的UIViewController 时,它的UITableView 被推到它应该在的位置上方约20px(注意顶部与推入视图控制器的单元格之间的单元格高度差异)。

与下面屏幕截图中的单元格位置比较:

此外,当我弹出最上面的UIViewController 时,它的UITableView 被推到它应该在的位置下方约20px(注意UITableView 上方额外的深蓝色空间)。

我已尝试将我的 -[UIViewController setHidesBottomBarWhenPushed:YES] 呼叫转移到 -[UIViewController loadView]-[UIViewController viewWillAppear:]-[UIViewController viewDidAppear:]。这些回调都太晚了,因为UIViewController 已经被推送,所以UIToolbar 没有隐藏。

有没有办法避免这些差距?目前,我在最上面的UIViewController-[UIViewController viewDidAppear:] 和最下面的UIViewController-[UIViewController viewDidAppear:] 中调用-[UINavigationController setToolbarHidden:YES animated:NO]-[UINavigationController setToolbarHidden:NO animated:NO]。这不太理想。

【问题讨论】:

  • 这些截图看起来很眼熟。我想我们在 Renaissance.io 坐在一起。应该自我介绍一下。

标签: ios uinavigationcontroller uikit core-animation uitoolbar


【解决方案1】:

假设 A 推动 B。根据您的描述,听起来 B 不应该知道它所呈现的任何东西都有一个工具栏。相反,当 A 推动 B 时,A 知道 B 不应该有 A 的工具栏。那么为什么不直接在初始化 B 的时候设置呢?

BController *b = [[BController alloc] init];
b.hidesBottomBarWhenPushed = YES;
[self.navigationController pushViewController:b animated:YES];

或者,如果您认为 B 确实需要控制此行为,您可以将其放入 B 的 init 方法中。

【讨论】:

  • 我确实把它放在了B的init方法中。只要在推送之前调用 hidesBottBarWhenPushed,就会得到这种行为。
猜你喜欢
  • 2017-02-27
  • 1970-01-01
  • 2023-03-03
  • 2011-08-17
  • 1970-01-01
  • 2015-06-03
  • 2014-08-31
  • 1970-01-01
  • 2020-03-29
相关资源
最近更新 更多