【发布时间】:2018-10-12 10:37:24
【问题描述】:
我用老方法将UIView注入UIViewController,但是升级到iOS 12后就不行了,报错:
libc++abi.dylib: terminating with uncaught exception of type NSException
这里是代码
class SlideOutMenu: UIViewController {
var contentView:UIView!
func setContentViewIn(view: UIView) {
self.contentView = view
self.view.addSubview(self.contentView)
}
}
然后
class MainController: UIViewController {
var slide = SlideOutMenu()
var viewToAdd = ViewToAdd() // extends UIView
override func viewDidLoad()
{
super.viewDidLoad()
slide.setContentViewIn(viewToAdd)
}
}
它不起作用,但如果我这样声明,它会起作用
class SlideOutMenu: UIViewController {
var contentView:UIView!
convenience init(childView: UIView) {
self.init(nibName:nil, bundle:nil)
self.contentView = childView
}
override func viewDidLoad() {
view.addSubview(self.contentView)
}
}
并使用
SlideOutMenu(childView: UIView())
有效。
但是像这样,它没有。这很奇怪
SlideOutMenu(childView: viewToAdd)
【问题讨论】:
-
我认为崩溃与视图无关。在它的核心你只是添加一个子视图。
-
self.contentView = view / view.addSubview(self.contentView)您正在将视图作为子视图添加到自身。那永远行不通。您可能想要更改self.view.addSubview(self.contentView)中的最后一行。 -
@danypata 我通过将其他视图实例传递给它来初始化视图。检查此代码:github.com/chidori-app/CDRTranslucentSideBar/blob/master/… 在 iOS12 之前它工作正常
-
它可能有效,但不应该这样做。看起来他们现在已经修好了。
-
@TomSawyer 您缺少
self.view,setContentViewIn中的参数名称会覆盖控制器的view属性。请将 setContentViewIn 的最后一行更改为self.view.addSubview(self.contentView)
标签: ios swift uiview uiviewcontroller