Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios textView高度等于不带viewDidLayoutSubviews的内容大小_Ios_Swift_Nslayoutconstraint - Fatal编程技术网

Ios textView高度等于不带viewDidLayoutSubviews的内容大小

Ios textView高度等于不带viewDidLayoutSubviews的内容大小,ios,swift,nslayoutconstraint,Ios,Swift,Nslayoutconstraint,我正在创建一个viewController,它包含两个文本视图,一个标题和一个全文。目前,我已经在interface builder中创建了两个文本视图,它们位于彼此下方,然后创建了以下代码,将高度更改为与内容相等。然而,问题是它似乎被延迟了,这给了用户糟糕的体验。我所说的延迟是指它需要0.5秒或1秒才能调整大小?这是我的密码: override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() setH

我正在创建一个viewController,它包含两个文本视图,一个标题和一个全文。目前,我已经在interface builder中创建了两个文本视图,它们位于彼此下方,然后创建了以下代码,将高度更改为与内容相等。然而,问题是它似乎被延迟了,这给了用户糟糕的体验。我所说的延迟是指它需要0.5秒或1秒才能调整大小?这是我的密码:

override func viewDidLayoutSubviews() {

    super.viewDidLayoutSubviews()

    setHeightToContent(self.titleText!)
    setHeightToContent(self.fullText!)

    scrollView?.contentSize = CGSizeMake(self.view.frame.width, self.fullText!.frame.origin.y + self.fullText!.frame.height)
    println(self.fullText!.frame.origin.y + self.fullText!.frame.height)



}


func setHeightToContent(theTextView: UITextView) {

    let contentSize = theTextView.sizeThatFits(theTextView.bounds.size)
    var frame = theTextView.frame
    frame.size.height = contentSize.height
    theTextView.frame = frame

    var aspectRatioTextViewConstraint = NSLayoutConstraint(item: theTextView, attribute: .Height, relatedBy: .Equal, toItem: theTextView, attribute: .Width, multiplier: theTextView.bounds.height/theTextView.bounds.width, constant: 1)
    theTextView.addConstraint(aspectRatioTextViewConstraint)
}

使每个文本视图根据其自身的内容自行调整大小,并使用约束,以便根据其内容自动配置滚动视图的
contentSize

如何使它们自行调整大小我以为这就是我在setHeightToContentYou中所做的,但是您在
viewdilayoutsubviews
中调用它。您希望在nib加载时执行此操作,然后,如果内容可以更改,则响应此操作。(事实上,这可能是造成延迟的部分原因,因为您是根据已经完成的布局来进行布局的。)此外,我并不是说您犯了这个错误,只是为了确保:如果标签可以,请不要使用文本视图。标签非常、非常擅长根据内容的高度调整自身大小。因此,如果用户不需要键入此内容,请使用标签,而不是文本视图。好的,我想我理解,这是否需要我以编程方式创建UILabels,以便在nib加载时使用适当的约束和
preferredMaxLayoutWidth
,标签的高度是自调整的。在iOS 8中,默认情况下,
preferredMaxLayoutWidth
是自动的。因此,它们不必“以编程方式创建”。它只是工作。