UIPageViewController UIImage 不显示全屏

UIPageViewController UIImage not showing full screen

我正在制作一个选项卡视图控制器应用程序。对于第一个选项卡,我有一个滚动浏览图片的 UIPageViewController。一切正常,除了图片没有全屏显示。我为图像视图设置了约束以覆盖整个视图控制器,但是当它加载到页面视图中时,它并没有一直覆盖到底部。图像被滚动点指示器截断,然后变成白色。

我敢肯定这很简单,但是有没有一种方法可以让图像像我设置的约束一样覆盖整个屏幕?

该页面上有一个非常简单的解决此问题的方法:http://tunesoftware.com/?p=3363

这是通过重写 UIPageViewControllerviewDidLayoutSubviews 方法完成的,基本上做了两件事:

  1. 增加 UIScrollView(内容)在 UIPageViewController 中的边界,方法是将其框架设置为页面控制器视图的边界
  2. UIPageControl 元素(点)移动到视图层次结构的前面,使其位于内容前面

这是他提供的代码(以防 link 被破坏):

import UIKit

class TSPageViewController: UIPageViewController {
    
    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()

        var subViews: NSArray = view.subviews
        var scrollView: UIScrollView? = nil
        var pageControl: UIPageControl? = nil
        
        for view in subViews {
            if view.isKindOfClass(UIScrollView) {
                scrollView = view as? UIScrollView
            }
            else if view.isKindOfClass(UIPageControl) {
                pageControl = view as? UIPageControl
            }
        }
        
        if (scrollView != nil && pageControl != nil) {
            scrollView?.frame = view.bounds
            view.bringSubviewToFront(pageControl!)
        }
    }
}

在那之后你要做的就是:

  • 如果您在情节提要中设置了页面控制器,则只需转到身份检查器窗格并将其 class 更改为 TSPageViewController
  • 如果您在代码中设置您的页面控制器,那么只要确保您为它定义的 class 继承了 TSPageViewController class.

这是 Objective-C 版本。新建 class(2 个文件):

(1) BasePageViewController.h 扩展 UIPageViewController

#import <UIKit/UIKit.h>

@interface BasePageViewController : UIPageViewController

@end

(2) BasePageViewController.m 包含 viewDidLayoutSubviews 覆盖

#import "BasePageViewController.h"

@implementation BasePageViewController

- (void) viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];

    UIScrollView *scrollView = nil;
    UIPageControl *pageControl = nil;

    for(UIView *view in self.view.subviews)
    {
        if([view isKindOfClass:[UIScrollView class]])
        {
            scrollView = (UIScrollView *)view;
        }else if([view isKindOfClass:[UIPageControl class]])
        {
            pageControl = (UIPageControl *)view;
        }
    }

    if(scrollView != nil && pageControl!=nil)
    {
        scrollView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
        [self.view bringSubviewToFront:pageControl];            
    }
}

@end