我有一个带有xib的自定义UIView。除内容视图外,该xib为空。
在相应的类中,加载xib,然后尝试创建一个WKWebView,如下所示:
@IBOutlet var contentView: UIView!
...
Bundle.main.loadNibNamed("CustomView", owner: self, options: nil)
addSubview(contentView)
contentView.frame = self.bounds
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: self.frame, configuration: webConfiguration)
webView.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(webView)
webView.backgroundColor = UIColor.orange // Just to check visually
在我的UIViewController中:
let v = CustomView.init(frame: frame)
self.view.addSubview(v)
当我运行项目时,当视图控制器出现时,我可以看到带有橙色背景的Web视图,但该视图立即消失了,我的代码有什么问题?
答案 0 :(得分:0)
请注意,webView.backgroundColor
无法正常工作。尝试使用load
url函数或调用loadHTMLString
进行验证。
为确保不是布局问题,请使用“调试视图层次结构”(在“调试”运行应用程序时单击Xcode中的双矩形图标)来检查子视图的边界/框架。如果在那里发现问题,则需要添加适当的布局约束。
如果是这样,您还可以对上面的所有addSubview调用使用以下实用程序功能。通过将子视图的边沿拉伸到另一边(全宽和全高),可以在另一个视图内添加子视图。
public static func add(_ subView: UIView, in containerView: UIView) {
containerView.addSubview(subView)
subView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
subView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor),
subView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor),
subView.topAnchor.constraint(equalTo: containerView.topAnchor),
subView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor)
]
)
}
答案 1 :(得分:0)
删除此行:
webView.translatesAutoresizingMaskIntoConstraints = false
该行表示,请使用我的约束条件。您没有任何限制,因此在进行布局时,Web视图最终将没有大小或位置。
答案 2 :(得分:0)
我找到了解决问题的方法。
最初,我使用contentView.addSubview(webView)
。 contentView
是我的xib的第一级,在创建新的xib时会自动创建。
为解决我的问题,我直接在Interface Builder中创建了一个UIView作为contentView的子视图。 然后,在y代码中,我将Web视图添加为该新视图的子视图,而不是从contentView中添加。现在可以了。
所以,简单地