【发布时间】:2015-04-20 22:36:15
【问题描述】:
我正在尝试找到解决这种情况的方法:
我有一个 UITabBarController,其 segue 之一连接到我用来嵌入 UINavigationController 的容器视图控制器 (BannerViewController),导航控制器推送其他容器视图控制器 (EventListContainerviewController),每个容器视图控制器都包含一个 tableview 控制器。
这是我故事板的屏幕
问题是最后一个容器视图显示在比它们的容器更小的框架中。似乎他们松开了底部的标签栏空间。
我已经强制所有视图控制器、导航控制器和标签栏控制器避免不扩展它们的边缘并调整插图。
颜色表示:
红色:BannerContainerViewController 的主视图 0x7fcc6d38bb00
浅绿色:BannerContainerViewController 的容器视图 0x7fcc6d38b860蓝色:EventListContainerViewController 的主视图 0x7fcc6bd7b7c0
橙色:EventListContainerViewController 的容器视图 0x7fcc6bd7b690
当导航控制器添加蓝色容器视图时,似乎发生了一些变化,将其大小减小了相同数量的标签栏(49pt)。
在视图层次结构的递归描述中也可以看出:
<UIWindow: 0x7fcc6bd5af40; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x7fcc6bd4dd80>; layer = <UIWindowLayer: 0x7fcc6bd317c0>>
| <UILayoutContainerView: 0x7fcc6bd671c0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7fcc6bd66de0>>
| | <UITransitionView: 0x7fcc6bd6a980; frame = (0 0; 320 568); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x7fcc6bd6ace0>>
| | | <UIViewControllerWrapperView: 0x7fcc6d3a7b20; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x7fcc6d3a7db0>>
| | | | <UIView: 0x7fcc6d38bb00; frame = (0 0; 320 519); autoresize = W+H; layer = <CALayer: 0x7fcc6d38bbd0>>
| | | | | <UIView: 0x7fcc6d38b860; frame = (0 0; 320 519); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7fcc6d38b930>>
| | | | | | <UILayoutContainerView: 0x7fcc6d398000; frame = (0 0; 320 519); autoresize = W+H; gestureRecognizers = <NSArray: 0x7fcc6d3a4b50>; layer = <CALayer: 0x7fcc6d387670>>
| | | | | | | <UINavigationTransitionView: 0x7fcc6d39cfa0; frame = (0 0; 320 519); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x7fcc6d39cc40>>
| | | | | | | | <UIViewControllerWrapperView: 0x7fcc6bf31230; frame = (0 0; 320 519); autoresize = W+H; layer = <CALayer: 0x7fcc6bf31300>>
| | | | | | | | | <UIView: 0x7fcc6bd7b7c0; frame = (0 64; 320 406); autoresize = W+H; layer = <CALayer: 0x7fcc6bd7afe0>>
| | | | | | | | | | <UIView: 0x7fcc6bd7b690; frame = (0 0; 320 406); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x7fcc6bd7aac0>>
| | | | | | | | | | | <UITableView: 0x7fcc6f03c400; frame = (0 0; 320 406); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x7fcc6bf34aa0>; layer = <CALayer: 0x7fcc6bf30bc0>; contentOffset: {0, 0}; contentSize: {320, 170}>
| | | | | | | | | | | | <UITableViewWrapperView: 0x7fcc6bf35960; frame = (0 0; 320 406); gestureRecognizers = <NSArray: 0x7fcc6bf363e0>; layer = <CALayer: 0x7fcc6bf35ed0>; contentOffset: {0, 0}; contentSize: {320, 406}>
| | | | | | | | | | | | | <EventCell: 0x7fcc6bca2950; baseClass = UITableViewCell; frame = (0 85; 320 85); autoresize = W; layer = <CALayer: 0x7fcc6bca2ca0>>
我尝试使用自定义 segue 而不是容器视图尝试强制布局,但我猜是导航控制器故障。
如您所见,横幅并未按预期与视图重叠。
有什么建议吗?
【问题讨论】:
-
您是否检查过您的视图控制器是否检查了
Extend Edges UnderBottomBars? -
当然,正如我在问题中所写的那样
-
ops...他们都有未选中的扩展边缘
-
@las 似乎已经解决了这个问题。如果我将 BannerViewController 设置为扩展底部栏,框架是正确的,但我不明白为什么,这似乎是一个技巧而不是解决方案
-
我不敢相信其他人也有这个特定的问题,我很难解决这个问题,真的很高兴我找到了这篇文章并看到这是一个已知问题
标签: ios objective-c uitableview uicontainerview