设置内容高度

时间:2015-12-14 11:13:19

标签: ios iphone swift

我需要的是首次启动应用程序时出现的许可协议。简单的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&#39;内容高度为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 - 当我向下滚动时我看到该按钮在外面可滚动区域。我错过了什么?

2 个答案:

答案 0 :(得分:2)

如果故事板中有AutoLayout,则可以执行此操作。您需要创建高度和宽度约束的出口。

@IBOutlet weak var height: NSLayoutConstraint!
@IBOutlet weak var width: NSLayoutConstraint!

现在您可以通过为其指定常量值来改变它

width.constant = 400
height.constant = 200

希望这可以帮到你!!

答案 1 :(得分:0)

好吧,当我在UITextView中调用licenseView.layoutIfNeeded() layoutSubviews()时,似乎将contentSize重置为文本大小。我不知道它究竟使用了什么逻辑

我可以通过编写基于UITextView的自定义类并覆盖layoutSubviews方法来解决我的问题,但我解决了这个问题:

licenseView.contentInset.bottom = button.frame.size.height