如何让UIPageViewController不clipToBounds

问题描述 投票:0回答:3

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

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

我想要的是这样的:

我怎样才能实现这个目标?我找不到执行此类操作的示例,并且尝试使用 UICollectionViewController 代替分页,但它不像 UIPageViewController 那样在页面之间具有平滑的间隙。

ios pagination uipageviewcontroller
3个回答
5
投票

UIPageViewController 的视图在子视图层次结构中在子视图控制器的实际视图之前有另一个 UIView(更准确地说是 _UIQueuingScrollView)。因此,要禁用 ClipsToBounds,您应该执行类似的操作:

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

5
投票

以下内容在 Swift 中对我有用:

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

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


0
投票

好奇心...

如果页面视图控制器设置为“curl”模式,实际上它无论如何都没有剪切。谁知道?

修复...

感谢布莱恩和维塔利

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

}
© www.soinside.com 2019 - 2024. All rights reserved.