我需要在UIPageViewController上覆盖UIView,并希望它能让我关闭clipsToBounds,然后将交互式边界区域调整到更小的高度,并将另一个视图放在非交互/非剪切区域的顶部
不幸的是,UIPageViewController以某种方式调整了childViewController的大小,无论如何都会剪切它。
我想要的是这样的:
我怎样才能做到这一点?我找不到做这样的事情的样本,并尝试使用UICollectionViewController代替分页,但它没有像UIPageViewController那样在页面之间有平滑的间隙。
答案 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 }
}
}