2

我利用ICViewPager来创建内容选项卡。但是,由于在ICViewPager的内容视图底部&底部存在奇怪的空间,所以布局看起来很奇怪。ICViewPager顶部和底部的奇怪空间

正如您在下面看到的,我在屏幕的顶部有一个UINavigationBar,它由嵌入UINavigationController生成。然后,使UINavigationController成为UITabbar Controller中的其中一个选项卡。下面是结构:

的UITabBarController - >的UINavigationController - > TabVC(其中包含ICViewPager) - >内容的观点:Content1VC,Content2VC,Content3VC

以下是TabVC代码(其CONFIGS有<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

Screenshot

+1

我不能完全肯定,但尝试用'edgesForExtendedLayout','extendedLayoutIncludesOpaqueBars'和'automaticallyAdjustsScrollViewInsets'玩,看看你能搞定 – ShahiM

+0

谢谢,当我注释掉'self.edgesForExtendedLayout = UIRectEdgeNone;',布局问题解决了。你可以请你把答案作为答案(如果可能,你能解释为什么线路导致这个问题吗?我不太明白) – Raptor

+1

张贴为答案。不客气。 – ShahiM

回答

3

我认为这是automaticallyAdjustsScrollViewInsetsedgesForExtendedLayout之间的冲突。

this答案:

edgesForExtendedLayout

基本上,该属性设置,你的观点的双方可以扩展到覆盖整个屏幕。假设你将一个UIViewController放到一个UINavigationController中,当该视图控制器的视图被布置时,它将从导航栏结束的地方开始,但是这个属性将设置视图的哪一侧(顶部,左侧,底部,右侧)可以扩展到填满整个屏幕。

automaticallyAdjustsScrollViewInsets

这个属性用来当你的看法是一个UIScrollView或类似的,就像一个UITableView。你希望你的桌子在导航栏结束处开始,因为如果没有,你不会看到整个内容,但是同时你希望你的桌子在滚动时覆盖整个屏幕。在这种情况下,将edgesForExtendedLayout设置为None将不起作用,因为您的表格将在导航栏结束处开始滚动,并且不会放在其后面。

因此,automaticallyAdjustsScrollViewInsets默认为YES,因此在顶部插入一个等于导航栏高度的正向插入。现在,当您应用self.edgesForExtendedLayout = UIRectEdgeNone时,插入从导航栏导致出现问题。

+1

我使用自定义的NavigationController和自定义UIViewControllers以编程方式创建了Tabbar。我有底部空间的问题。所以我用self.edgesForExtendedLayout = .top和它的工作。谢啦 –