居中对齐UIImageview和大型UILabel自动布局

3
我有一个UIImageView和一个UILabel。标签的高度大于图像的高度,因此我希望两者在Y轴上都居中对齐。
这是原始情况: enter image description here 当我将图像的垂直居中应用于标签时,标签的内容被截断。
请问有没有人能为我指导正确的约束条件...谢谢!
2个回答

1

Storyboard Image

我在故事板中使用上述设置。左侧是一个UIImageView,右侧是一个UITextView,并在UIViewController中进行设置。我按照以下方式设置了约束:

UIImageView

  • 宽度等于://您想要的任何值
  • 高度等于://您想要的任何值
  • 与TextView对齐居中
  • Leading Space到Superview:16
  • Trailing Space到TextView:8

UITextView

  • 与ImageView对齐居中
  • Trailing Space到Superview:16
  • Leading Space到ImageView: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
    }
}

我也将ImageView与顶部布局对齐,这就是为什么ImageView无法与标签居中对齐的原因。谢谢你的帮助。 - NightFury

0

如果我想要居中某个元素,我不会使用中心约束,因为它并不总是有效,就像你所说的那样。我的做法是添加一个左侧空间和右侧空间的约束来实现水平居中,以及添加一个顶部空间和底部空间的约束来实现垂直居中。

这将使您的标签在左右两侧各有30像素的空间处居中。如果您想使用整个空间,只需将常量设置为0即可。(对于Y轴,只需更改另外两个-->请注意,要激活约束,请单击红线)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接