中心对齐UIImageview和大型UILabel AutoLayout

时间:2015-06-03 12:20:04

标签: ios autolayout

我有UIImageViewUILabel。标签的高度比图像高,所以我想将两个中心对齐Y位置。

这是原始案例:

enter image description here

当我将中心Y 从图像应用到标签时,标签内容会被截断。

enter image description here

请有人指导我正确的约束......谢谢!

2 个答案:

答案 0 :(得分:1)

Storyboard Image

我在故事板中使用上面的设置。左侧是UIImageView,右侧是UITextView;在UIViewController中设置。我设置了这样的约束:

UIImageView

  • 宽度等于://无论你想要什么
  • 高度等于://无论你想要什么
  • 对齐中心Y:文字视图
  • 超级视野的领先空间:16
  • 尾随空格到文本视图:8

UITextView

  • 对齐中心Y:图像视图
  • Superview的尾随空间:16
  • 领先空间到图像视图:8
  • 顶部空间到顶部布局指南:16
  • 高度等于://无论你想要什么;这将改变

中心Y约束会使UIImageViewUITextView为中心。 UITextView上的顶部空间约束将设置视图的垂直位置。 UITextView上的高度约束是动态高度部分的来源。为视图控制器建立UITextView和文本视图高度约束的出口。同时将自己设置为文本视图的委托。这将允许我们在文本视图中的文本发生更改时动态更改所有内容。

class ViewController: UIViewController, UITextViewDelegate {
    @IBOutlet weak var textView: UITextView!
    @IBOutlet weak var textViewHeight: NSLayoutConstraint!

    override func viewDidLoad() {
        super.viewDidLoad()
        self.textView.delegate = self
    }

    func textViewDidChange(textView: UITextView) {
        // Ask the text view how much size it needs to fit its content if it has to 
        // fit in its current width but can grow vertically as much as it needs
        let sizeToFitIn = CGSizeMake(textView.bounds.size.width, CGFloat(MAXFLOAT))
        let newSize = self.textView.sizeThatFits(sizeToFitIn)
        self.textViewHeight.constant = newSize.height
    }
}

答案 1 :(得分:0)

如果我想集中某些内容,我不会使用中心约束,因为它对我来说也不起作用,正如你所说的那样。我所做的是为X居中和顶部空间以及底部空间添加约束前导空间和尾随空间以进行Y居中。

这将使您的标签在左侧和右侧的30px空间居中。如果你想使用整个空间,只需将常数设为0.(对于Y,只需更改另外两个 - >注意激活约束,你必须点击红线)

enter image description here