如何让UIPageViewController不要clipToBounds

时间:2015-05-13 17:59:58

标签: ios paging uipageviewcontroller

我需要在UIPageViewController上覆盖UIView,并希望它能让我关闭clipsToBounds,然后将交互式边界区域调整到更小的高度,并将另一个视图放在非交互/非剪切区域的顶部

不幸的是,UIPageViewController以某种方式调整了childViewController的大小,无论如何都会剪切它。

我想要的是这样的:

我怎样才能做到这一点?我找不到做这样的事情的样本,并尝试使用UICollectionViewController代替分页,但它没有像UIPageViewController那样在页面之间有平滑的间隙。

3 个答案:

答案 0 :(得分:4)

在您的childViewController的实际视图之前,UIPageViewController的视图在子视图层次结构中有另一个UIView(更确切地说是_UIQueuingScrollView)。因此,要禁用clipsToBounds,您应该执行以下操作:

UIPageViewController *pageViewController = ...;
pageViewController.view.clipsToBounds = NO;
[[pageViewController.view subviews].firstObject setClipsToBounds:NO];

答案 1 :(得分:3)

以下在Swift中为我工作:

pageViewController.clipsToBounds = false
pageViewController.view.clipsToBounds = false
for view in pageViewController.view.subviews {
    view.clipsToBounds = false
}

与Vitaly的答案类似,但使用循环确保所有子视图都得到处理。

答案 2 :(得分:0)

好奇心...

如果页面视图控制器设置为“卷曲”模式,则实际上它没有任何裁剪。谁知道?

修复...

感谢Brian和Vitaly

class FixedPVC: UIPageViewController {
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        view.clipsToBounds = false
        for v in view.subviews { v.clipsToBounds = false }
    }

}