我使用ICViewPager
创建内容的选项卡。但是,布局看起来很奇怪,因为ICViewPager
内容视图的顶部和底部都有奇怪的空格。
如您在下面看到的,我在屏幕顶部有一个UINavigationBar
,由UINavigationController
嵌入生成。然后,使UINavigationController
成为UITabbar Controller
中的选项卡之一。结构如下:
UITabbarController-> UINavigationController-> TabVC(包含ICViewPager)->内容视图:Content1VC,Content2VC,Content3VC
以下是TabVC
中的代码(配置为<ViewPagerDataSource, ViewPagerDelegate>
):
// in viewDidLoad
self.dataSource = self;
self.delegate = self;
self.edgesForExtendedLayout = UIRectEdgeNone;
对于委托方法:
#pragma mark - ViewPagerDataSource
- (NSUInteger)numberOfTabsForViewPager:(ViewPagerController *)viewPager {
return tabsContents.count;
}
- (UIView *)viewPager:(ViewPagerController *)viewPager viewForTabAtIndex:(NSUInteger)index {
UILabel *label = [UILabel new];
label.text = [tabsContents objectAtIndex:index];
label.textColor = [UIColor colorWithRed:136/255.0 green:136/255.0 blue:136/255.0 alpha:1.0f];
[label sizeToFit];
return label;
}
- (UIViewController *)viewPager:(ViewPagerController *)viewPager contentViewControllerForTabAtIndex:(NSUInteger)index {
UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:[tabsVC objectAtIndex:index]];
return vc;
}
这些功能看起来还不错,但是布局并未像预期的那样跨越整个空间。不会出现红色空格(我将TabVC视图的背景颜色设置为红色以说明问题)。如何使
ICViewPager
占据红色空间?注意:仅在之后出现,这是从推送的视图控制器弹出视图或更改
UITabbarController
中的选项卡最佳答案
我认为automaticallyAdjustsScrollViewInsets
和edgesForExtendedLayout
之间存在冲突。
从this答案:
EdgesForExtendedLayout
基本上,使用此属性可以设置可以扩展视图的哪一部分以覆盖整个屏幕。想象一下,将UIViewController推入UINavigationController时,当该视图控制器的视图布局好后,它将在导航栏结束的地方开始,但是此属性将设置视图的哪一侧(顶部,左侧,底部,右侧)可以扩展以填充整个屏幕。
和
自动调整ScrollViewInsets
当视图是UIScrollView或类似的东西(如UITableView)时,将使用此属性。您希望表格从导航栏的结尾处开始,因为如果没有,您将看不到整个内容,但是同时您希望表格在滚动时覆盖整个屏幕。在这种情况下,将edgeForExtendedLayout设置为None将不起作用,因为您的表将在滚动条结束处开始滚动并且不会在其后面滚动。
因此,automaticallyAdjustsScrollViewInsets
默认为YES,因此在顶部插入一个等于导航栏高度的正插入。现在,当您应用self.edgesForExtendedLayout = UIRectEdgeNone
时,该插图会从导航栏下方爬出,从而导致上述问题。