WKWebView 没有出现在自定义 UIView 中
WKWebView does not appear in a custom UIView
我有一个带有 xib 的自定义 UIView。除内容视图外,xib 为空。
在相应的class中我加载了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 视图,但它立即消失,我的代码有什么问题吗?
请注意,webView.backgroundColor
未按预期工作。尝试使用 load
url 函数或调用 loadHTMLString
来验证。
为了确保这不是布局问题,请使用 "Debug View Hierarchy"(调试 运行 应用程序时单击 Xcode 中的双矩形图标)检查 bounds/frame你的子视图。如果您在那里看到问题,那么您需要添加适当的布局约束。
如果是这样,您还可以对上述所有 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)
]
)
}
删除这一行:
webView.translatesAutoresizingMaskIntoConstraints = false
该行的意思是,使用我的约束。你没有任何限制,所以当布局发生时,网络视图最终没有大小或位置。
我找到了解决问题的方法。
最初我使用contentView.addSubview(webView)
。 contentView
在我的xib的第一层,当我创建一个新的xib时自动创建。
为了解决我的问题,我直接在 Interface Builder 中创建了一个 UIView 作为 contentView 的子视图。
然后,在 y 代码中,我将 web 视图添加为这个新视图的子视图,而不是来自 contentView。现在好了。
所以,简而言之
- 之前的情况:xib的contentView --> webView
- 现在的情况:xib的contentView --> UIView --> webView
我有一个带有 xib 的自定义 UIView。除内容视图外,xib 为空。
在相应的class中我加载了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 视图,但它立即消失,我的代码有什么问题吗?
请注意,webView.backgroundColor
未按预期工作。尝试使用 load
url 函数或调用 loadHTMLString
来验证。
为了确保这不是布局问题,请使用 "Debug View Hierarchy"(调试 运行 应用程序时单击 Xcode 中的双矩形图标)检查 bounds/frame你的子视图。如果您在那里看到问题,那么您需要添加适当的布局约束。
如果是这样,您还可以对上述所有 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)
]
)
}
删除这一行:
webView.translatesAutoresizingMaskIntoConstraints = false
该行的意思是,使用我的约束。你没有任何限制,所以当布局发生时,网络视图最终没有大小或位置。
我找到了解决问题的方法。
最初我使用contentView.addSubview(webView)
。 contentView
在我的xib的第一层,当我创建一个新的xib时自动创建。
为了解决我的问题,我直接在 Interface Builder 中创建了一个 UIView 作为 contentView 的子视图。 然后,在 y 代码中,我将 web 视图添加为这个新视图的子视图,而不是来自 contentView。现在好了。
所以,简而言之
- 之前的情况:xib的contentView --> webView
- 现在的情况:xib的contentView --> UIView --> webView