【发布时间】:2015-12-14 11:13:18
【问题描述】:
我需要的是在首次启动应用程序时显示的许可协议。简单的 UITextView,文本后带有同意按钮。我需要它的大小等于屏幕大小并且内容可以滚动。这一切都发生在主 ViewController 的 ViewDidLoad() 方法中:
let text = "<p>very very long html text</p>"
var str = NSAttributedString()
do {
str = try NSAttributedString(data: text.dataUsingEncoding
(NSUnicodeStringEncoding, allowLossyConversion: true)!,
options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
documentAttributes: nil)
}
catch
{
print(error)
}
let licenseView = UITextView(frame:CGRectMake(self.navigationController!.view.frame.origin.x,self.navigationController!.view.frame.origin.y, self.navigationController!.view.frame.size.width, self.navigationController!.view.frame.size.height))
licenseView.attributedText = str
licenseView.scrollEnabled = true
licenseView.editable = false
licenseView.selectable = true
licenseView.dataDetectorTypes = .All
let LVSize:CGSize = licenseView.sizeThatFits(CGSizeMake(licenseView.frame.size.width, CGFloat(FLT_MAX)))
licenseView' 内容高度为 1850.5。需要添加y位置等于1850.5的按钮。
let button = UIButton(frame:CGRectMake(0, LVSize.height, 300, 50))
button.setTitle("Agree", forState: .Normal)
button.backgroundColor = UIColor.blueColor()
licenseView.addSubview(button)
现在我们需要调整内容的大小以使按钮在文本之后可见
licenseView.contentSize = CGSizeMake(licenseView.frame.size.width, LVSize.height+300)
licenseView.setNeedsDisplay()
licenseView.layoutIfNeeded()
self.navigationController!.view.addSubview(licenseView)
问题是 contentSize 已更改(如果我 print(licenseView.contentSize) 它将输出 (320.0, 2150.5)),但 textView 的行为仍然像其内容高度为 1850.5 - 当我向下滚动时,我看到该按钮位于可滚动区域之外。我错过了什么?
【问题讨论】:
-
在添加按钮之前分配文本视图的内容大小