使用Aspect Fill图像模式的奇怪UIPageViewController滑动行为

jwi*_*tos 3 uiimageview ios uipageviewcontroller autolayout swift

我刚创建了一个UIPageViewController包含单个ImageView和a的页面内容视图控制器Button.它几乎完美无缺,但是当我尝试仅在垂直视图中滑动视图时,它有一个主要问题,为我设置了Aspect Fill模式ImageView(这基本上是为此设置的).

您可以在此处看到此行为:https://youtu.be/2yl6UXbUGQg

我正在使用autolayout,Button约束与ImageView(全尺寸)对齐,ImageView约束设置为Superview ...

码:

1)UIPageViewController:

class ViewController: UIPageViewController, UIPageViewControllerDataSource {

    var arrPageTitle: NSArray = NSArray()
    var arrPagePhoto: NSArray = NSArray()

    override func viewDidLoad() {
        super.viewDidLoad()

        arrPageTitle = ["page 1", "page 2", "page 3"]
        arrPagePhoto = ["slider-1.jpg", "slider-2.jpg", "slider-3.jpeg"]

        self.dataSource = self
        self.setViewControllers([getViewControllerAtIndex(0)] as [UIViewController],
                                direction: .Forward,
                                animated: false,
                                completion: nil)
    }

    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
        let pageContent: PageContentViewController = viewController as! PageContentViewController
        var index = pageContent.pageIndex
        if ((index==0) || (index == NSNotFound)) {
            return nil
        }
        index -= 1
        return getViewControllerAtIndex(index)
    }

    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
        let pageContent: PageContentViewController = viewController as! PageContentViewController
        var index = pageContent.pageIndex
        if index == NSNotFound {
            return nil
        }
        index += 1
        if index == arrPageTitle.count {
            return nil
        }
        return getViewControllerAtIndex(index)
    }

    func getViewControllerAtIndex(index: NSInteger) -> PageContentViewController {
        let pageContentViewController = self.storyboard?.instantiateViewControllerWithIdentifier("PageContentViewController") as! PageContentViewController
        pageContentViewController.strTitle = "\(arrPageTitle[index])"
        pageContentViewController.strPhotoName = "\(arrPagePhoto[index])"
        pageContentViewController.pageIndex = index
        return pageContentViewController
    }
}
Run Code Online (Sandbox Code Playgroud)

2)内容视图控制器,UIViewController:

class PageContentViewController: UIViewController {

    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var labelTitle: UIButton!

    var pageIndex: Int = 0
    var strTitle: String!
    var strPhotoName: String!


    override func viewDidLoad() {
        super.viewDidLoad()

        self.imageView.image = UIImage(named: self.strPhotoName)
        self.labelTitle.setTitle(self.strTitle, forState: .Normal)
    }
}
Run Code Online (Sandbox Code Playgroud)

Tyl*_*ler 10

从一个视图控制器你的图像视图蔓延到其他视图控制器,因为你需要设置clipsToBoundstrue你的图像视图.这将防止图像视图的内容超出图像视图的范围.