UIWebView sizeThatFits仅适用于委托方法

时间:2017-04-13 07:04:11

标签: ios swift uiwebview

所以我使用像UILabel这样的UIWebView和UITextBox,通过

更改其文本
@IBAction func textChanged(_ sender: Any){}

我使用

将UIWebView调整为其内容的大小,具有固定的宽度和灵活的高度
override func viewDidLoad() {
    super.viewDidLoad()

    label = WebLabel(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 1))
    label.delegate = self
    label.layer.borderColor = UIColor.black.cgColor
    label.layer.borderWidth = 1.0
    self.view.addSubview(label)
}

其中WebLabel是从UIWebView派生的类,它实现以下方法:

func set(query: String)
{
    let htmlString = makeHTMLString(input: (query))
    self.loadHTMLString(htmlString, baseURL: nil)
    self.sizeToFit()
}

所以这篇文章改变了,我得到了我想要的结果:

 @IBAction func textChanged(_ sender: Any) {
    label.set(query: (sender as! UITextField).text!)
    label.frame = CGRect(x: label.frame.origin.x, y: label.frame.origin.y, width: label.frame.width, height: 1)

    let size = label.sizeThatFits(CGSize.zero)

    label.frame = CGRect(x: label.frame.origin.x, y: label.frame.origin.y, width: label.frame.width, height: size.height)
}

但我也想设置一个初始的html文本。我是这样做的:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    label.set(query: "Hello World !")
    label.frame = CGRect(x: label.frame.origin.x, y: label.frame.origin.y, width: label.frame.width, height: 1)

    let size = label.sizeThatFits(CGSize.zero)

    label.frame = CGRect(x: label.frame.origin.x, y: label.frame.origin.y, width: label.frame.width, height: size.height)
}

但这不起作用。因此代码似乎仅在委托方法中由用户触发时才起作用。我该如何解决这个问题?非常感谢你的帮助!

0 个答案:

没有答案