ICViewPager 顶部和底部的奇怪空间

Strange spaces at the top & bottom of ICViewPager

我使用 ICViewPager 创建内容标签。但是,布局看起来很奇怪,因为 ICViewPager 内容视图的顶部和底部有奇怪的空间。

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

UITabbarController --> UINavigationController --> TabVC (which contains ICViewPager) --> Content views: 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

中的选项卡后出现

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

来自this的回答:

edgesForExtendedLayout

Basically, with this property you set which sides of your view can be extended to cover the whole screen. Imagine that you push a UIViewController into a UINavigationController, when the view of that view controller is laid out, it will start where the navigation bar ends, but this property will set which sides of the view (top, left, bottom, right) can be extended to fill the whole screen.

automaticallyAdjustsScrollViewInsets

This property is used when your view is a UIScrollView or similar, like a UITableView. You want your table to start where the navigation bar ends, because you wont see the whole content if not, but at the same time you want your table to cover the whole screen when scrolling. In that case, setting edgesForExtendedLayout to None won't work because your table will start scrolling where the navigation bar ends and it wont go behind it.

因此,automaticallyAdjustsScrollViewInsets 默认为 YES,因此在顶部插入一个等于导航栏高度的正内插。现在,当您应用 self.edgesForExtendedLayout = UIRectEdgeNone 时,该插图会从导航栏下方爬出,从而导致上述问题。