使用AutoLayout更改方向更改时的UITextView高度

时间:2015-02-22 23:08:33

标签: ios swift autolayout uitextview

我有一个UIScrollView,其中包含一个大的UITextView。我创建了一个约束来使文本视图宽度为100%,我现在希望textview在方向更改时调整高度,我找不到如何执行此操作。

这是我现在的代码:

var wordLabel = UITextView()
wordLabel.attributedText = wordText
wordLabel.editable = false
wordLabel.scrollEnabled = false
wordLabel.setTranslatesAutoresizingMaskIntoConstraints(false)

let wordLabelSize = wordLabel.sizeThatFits(maxLabelsSize)
wordLabel.frame = CGRectMake(0, 0, wordLabelSize.width, wordLabelSize.height)
wordLabel.center = CGPoint(x: wordLabel.frame.width / 2, y: wordLabel.frame.height / 2)
scrollView.addSubview(wordLabel)


let wordLabelConstraintWidth = NSLayoutConstraint(item: wordLabel, attribute: NSLayoutAttribute.Width, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Width, multiplier: 1, constant: -32)
scrollView.addConstraint(wordLabelConstraintWidth)

scrollView.contentSize = CGSize(width: scrollView.frame.width - 32, height: wordLabel.frame.origin.y + wordLabel.frame.height)
当应用程序启动时,

scrollViewwordLabel尺寸正确,但当横向更改为横向时,滚动会变得过高。

我真的不知道如何重新计算scrollView contentSize的方向更改,任何想法?

1 个答案:

答案 0 :(得分:1)

你有两种方式:

  1. 设置高度约束,并执行以下操作:

    wordLabelConstraintHeight.costant = (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)) ? 60.0 : 25.0;
    
  2. 如果textView应按比例调整屏幕大小,则可以使用乘数

    let wordLabelConstraintHeight = NSLayoutConstraint(item: wordLabel, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: scrollView, attribute: NSLayoutAttribute.Height, multiplier: 0.2, constant: 0)
    

    例如,此代码会使textView的高度成为您scrollView框架的20%,我确定它会根据屏幕大小而变化,因此根据界面的方向。