如何在 swift 中设置 webview window 的大小?
How to set the size of a webview window in swift?
我是 Swift
编程的初学者,想在我的应用程序中添加一个 webView
,但我无法正确设置此 view
的大小。目标是将这个 webView
放在屏幕的下三分之一(纵向模式),因此我尝试 storyboard
中的 webView
window 看起来像那样并设置约束。
为了 webView
的编程,我参考了苹果开发者指南:https://developer.apple.com/documentation/webkit/wkwebview
问题是,每次我启动应用程序时,webView
只是全屏显示,而不是 storyboard
中的建模区域。
我想也许我可以修改
webView = WKWebView(frame: .zero, configuration: webConfiguration)
。
我尝试创建自定义框架,但没有任何效果,只能全屏显示。
有人可以告诉我如何使用 storyboard
的边界设置 webView
window 吗?
我是否也应该使用 WKWindowFeatures
class?
我真的搜索了几个小时并为此观看了很多 youtube 视频,但没有任何帮助。非常感谢任何帮助,谢谢。
UPDATE/Solution:
感谢评论里的大家!大家帮了我大忙!我尝试了不同的解决方案,有些从一开始就有效,有些则需要进一步研究。我 运行 陷入初学者错误,例如 Couldn’t instantiate class named WKWebView
或 This Class is not Key Value Coding-Compliant for the Key
。第一个我通过检查约束解决了,第二个通过在 Build phase Tab in General 中添加 WebKit Framework 解决了。
@AshishGupta 的解决方案最适合我。
solutionscreenshot
可以使用下面的代码来简单webView
:图片会显示小webView
.
import UIKit
import WebKit
class ViewController: UIViewController {
@IBOutlet weak var wkwebView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let myURL = URL(string:"https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
wkwebView.load(myRequest)
}
}
首先,欢迎来到 Whosebug 和 iOS。
你的方法没有错。正确设置约束和设置自定义框架都应该可以正常工作。但是,Apple 开发人员文档中有非常微小的细节可能会弄乱一切。
在函数override func loadView()
的末尾有这一行view = webView
。
这会丢弃到那时为止对 UIViewController 的视图 属性 所做的所有操作,并将其设置为 webView 对象。
删除该行应该可以解决所有问题。如果没有,请使用 webView 的故事板约束的屏幕截图更新您的问题。
您还应该将 webview 设置移到 loadView()
函数之外。可能到 viewDidLoad()
或 viewWillAppear
。
干杯!
我需要添加 WKWebView
作为 subview
以使其可调整大小。
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView = WKWebView(frame: CGRect(x: 0, y: self.view.frame.height-500, width: self.view.frame.width, height: 500), configuration: WKWebViewConfiguration())
self.view.addSubview(webView)
let myURL = URL(string:"https://developer.apple.com/")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
该代码生成如下内容:
希望对您有所帮助!
1. WKWebView 使用约束
假设你想固定 webView 的高度,你可以像这样以编程方式设置约束
只需从 storyBoard 获取 WebKit View 并创建您的 WebView 的出口
@IBOutlet weak var webView: WKWebView!
然后像这样给 webView 设置约束
override func viewDidLoad() {
super.viewDidLoad()
webView!.translatesAutoresizingMaskIntoConstraints = false
let leadingConstraint = NSLayoutConstraint(item: webView!, attribute: NSLayoutConstraint.Attribute.leading, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.leading, multiplier: 1, constant: 30)
let trailingConstraint = NSLayoutConstraint(item: webView!, attribute: NSLayoutConstraint.Attribute.trailing, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.trailing, multiplier: 1, constant: -30)
let bottomConstraint = NSLayoutConstraint(item: webView!, attribute: NSLayoutConstraint.Attribute.bottom, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: -30)
let heightConstraint = NSLayoutConstraint(item: webView!, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 350)
view.addConstraints([trailingConstraint, leadingConstraint, bottomConstraint, heightConstraint])
//Leading = 30 from superview
//Trailing = 30 from superview
//Bottom = 30 from superview
//Equal height = 350
let myURL = URL(string: "https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
2。 WKWebView 无约束
override func viewDidLoad() {
super.viewDidLoad()
let webView = WKWebView(frame: CGRect(x: 30, y: UIScreen.main.bounds.height-330, width: self.view.frame.width-60, height: 300))
let myURL = URL(string: "https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
view.addSubview(webView)
}
我是 Swift
编程的初学者,想在我的应用程序中添加一个 webView
,但我无法正确设置此 view
的大小。目标是将这个 webView
放在屏幕的下三分之一(纵向模式),因此我尝试 storyboard
中的 webView
window 看起来像那样并设置约束。
为了 webView
的编程,我参考了苹果开发者指南:https://developer.apple.com/documentation/webkit/wkwebview
问题是,每次我启动应用程序时,webView
只是全屏显示,而不是 storyboard
中的建模区域。
我想也许我可以修改
webView = WKWebView(frame: .zero, configuration: webConfiguration)
。
我尝试创建自定义框架,但没有任何效果,只能全屏显示。
有人可以告诉我如何使用 storyboard
的边界设置 webView
window 吗?
我是否也应该使用 WKWindowFeatures
class?
我真的搜索了几个小时并为此观看了很多 youtube 视频,但没有任何帮助。非常感谢任何帮助,谢谢。
UPDATE/Solution:
感谢评论里的大家!大家帮了我大忙!我尝试了不同的解决方案,有些从一开始就有效,有些则需要进一步研究。我 运行 陷入初学者错误,例如 Couldn’t instantiate class named WKWebView
或 This Class is not Key Value Coding-Compliant for the Key
。第一个我通过检查约束解决了,第二个通过在 Build phase Tab in General 中添加 WebKit Framework 解决了。
@AshishGupta 的解决方案最适合我。
solutionscreenshot
可以使用下面的代码来简单webView
:图片会显示小webView
.
import UIKit
import WebKit
class ViewController: UIViewController {
@IBOutlet weak var wkwebView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let myURL = URL(string:"https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
wkwebView.load(myRequest)
}
}
首先,欢迎来到 Whosebug 和 iOS。
你的方法没有错。正确设置约束和设置自定义框架都应该可以正常工作。但是,Apple 开发人员文档中有非常微小的细节可能会弄乱一切。
在函数override func loadView()
的末尾有这一行view = webView
。
这会丢弃到那时为止对 UIViewController 的视图 属性 所做的所有操作,并将其设置为 webView 对象。
删除该行应该可以解决所有问题。如果没有,请使用 webView 的故事板约束的屏幕截图更新您的问题。
您还应该将 webview 设置移到 loadView()
函数之外。可能到 viewDidLoad()
或 viewWillAppear
。
干杯!
我需要添加 WKWebView
作为 subview
以使其可调整大小。
var webView: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webView = WKWebView(frame: CGRect(x: 0, y: self.view.frame.height-500, width: self.view.frame.width, height: 500), configuration: WKWebViewConfiguration())
self.view.addSubview(webView)
let myURL = URL(string:"https://developer.apple.com/")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
该代码生成如下内容:
希望对您有所帮助!
1. WKWebView 使用约束
假设你想固定 webView 的高度,你可以像这样以编程方式设置约束
只需从 storyBoard 获取 WebKit View 并创建您的 WebView 的出口
@IBOutlet weak var webView: WKWebView!
然后像这样给 webView 设置约束
override func viewDidLoad() {
super.viewDidLoad()
webView!.translatesAutoresizingMaskIntoConstraints = false
let leadingConstraint = NSLayoutConstraint(item: webView!, attribute: NSLayoutConstraint.Attribute.leading, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.leading, multiplier: 1, constant: 30)
let trailingConstraint = NSLayoutConstraint(item: webView!, attribute: NSLayoutConstraint.Attribute.trailing, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.trailing, multiplier: 1, constant: -30)
let bottomConstraint = NSLayoutConstraint(item: webView!, attribute: NSLayoutConstraint.Attribute.bottom, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.bottom, multiplier: 1, constant: -30)
let heightConstraint = NSLayoutConstraint(item: webView!, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 350)
view.addConstraints([trailingConstraint, leadingConstraint, bottomConstraint, heightConstraint])
//Leading = 30 from superview
//Trailing = 30 from superview
//Bottom = 30 from superview
//Equal height = 350
let myURL = URL(string: "https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
2。 WKWebView 无约束
override func viewDidLoad() {
super.viewDidLoad()
let webView = WKWebView(frame: CGRect(x: 30, y: UIScreen.main.bounds.height-330, width: self.view.frame.width-60, height: 300))
let myURL = URL(string: "https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
view.addSubview(webView)
}