在我的应用中,我从这里使用KYDrawerController库:https://github.com/ykyouhei/KYDrawerController
它按预期工作,但我想在菜单视图控制器上添加一个UIButton(打开时位于顶部),但它被视图边界剪切。我可以通过向您展示屏幕截图来解释这一点的最佳方式:
以下是它的样子:
按钮现在具有负右约束边距,因此它的位置是正确的,但是如何禁用剪裁呢?
在菜单视图控制器中,您可以在前台看到,我已添加此代码:
self.navigationController?.navigationBar.clipsToBounds = false
self.navigationController?.view.clipsToBounds = false
self.view.clipsToBounds = false
let elDrawer = self.navigationController?.parent as! KYDrawerController
elDrawer.view.clipsToBounds = false
elDrawer.displayingViewController?.view.clipsToBounds = false
elDrawer.drawerViewController?.view.clipsToBounds = false
elDrawer.displayingViewController?.view.clipsToBounds = false
elDrawer.mainViewController.view.clipsToBounds = false
elDrawer.inputViewController?.view.clipsToBounds = false
elDrawer.splitViewController?.view.clipsToBounds = false
正如您所看到的,我已经尝试了所有可能的方法来禁用剪辑,但它仍然被裁剪。我怎样才能做到这一点?
我也尝试过以下测试:
var view = arrowButton as UIView?
repeat {
view = view?.superview
if let sview = view {
if(sview.clipsToBounds){
print("View \(view) clips to bounds")
break
}
else{
print("View \(view) does not clip to bounds")
}
}
} while (view != nil)
它打印出来:
查看可选(>)不会剪辑到 边界
所以看起来没什么东西可以裁剪但它已经剪裁了。
答案 0 :(得分:1)
是的,我找到了解决方案:
self.navigationController?.view.subviews[0].clipsToBounds = false
不需要旧代码。
UINavigationTransitionView(它的Apple私人课程)是负责打开clipToBounds的人。
答案 1 :(得分:0)
我们无法确切地告诉您发生了什么,因为您没有向我们展示视图层次结构。
我建议你编写从按钮开始的测试代码,沿着superview层次结构寻找一个'clipsToBounds为true的超级视图。像这样:
var view = button as UIView?
repeat {
view = view.superview
if view?.superview.clipsToBounds ?? false == true {
print("View \(view) clips to bounds")
break
} while view != nil
然后你会知道哪个视图是裁剪的,你可以用你正在使用的“霰弹枪”方法修复它。
我不确定你为什么会收到如此奇怪的调试信息。我建议在所有按钮的超级视图中添加唯一标记号,然后使用以下代码:
override func viewDidAppear(_ animated: Bool) {
var view = button as UIView?
repeat {
view = view?.superview
if let view = view {
let tag = view.tag
let description = (tag == 0) ? view.debugDescription : "view w tag \(tag)"
if(view.clipsToBounds){
print("View \(description) clips to bounds")
break
}
else{
print("View \(description) does not clip to bounds")
}
}
} while (view != nil)
}
发布 ALL 该调试代码的输出,以便我们可以看到您正在处理的整个视图层次结构。