使用动态UITextView,UIImageView和UILabel Heights的自动布局

时间:2013-12-23 01:16:46

标签: ios objective-c uitextview xcode5 autolayout

我正在尝试创建一个包含一个包含2个标签和文本视图的图像视图的视图。每个元素的内容都将从SQLite数据库中读取,所以我想使用Xcode 5的自动布局来更改每个UI元素的高度以及它们之间的距离,根据每个元素的内容有效地使用屏幕空间尽可能。我有一些条件,我试图通过界面构建​​器中的自动布局强制执行,但我不知道如何实现它们:

  • 标签与其正下方的文字视图之间的距离将保持不变
  • 所有元素的宽度将保持不变,并且它们都将水平居中
  • 只有元素框架的高度和y值会发生变化
  • 如果文本视图的内容高度超过了可以显示的屏幕高度,则应将图像视图的高度降低到最小值,然后降低文本视图的高度
  • 每个元素之间的距离应相等(不包括关联标签和文本视图之间的距离)

我能够以编程方式完成所有这些操作,但我想使用自动布局,以便视图可以轻松适应屏幕大小的变化并防止错误。我对自动布局的经验很少,而且我遇到了在这种情况下我需要的复杂规格。为了使我想要创建的内容更清晰,这里是.xib文件的屏幕截图:

screenshot

感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

http://www.techotopia.com/index.php/Implementing_iOS_6_Auto_Layout_Constraints_in_Code

请参阅本网站, 可能会得到你的解决方案

答案 1 :(得分:0)

看看Autolayout Visual Format Language。他们在去年的一些WWDC视频中讨论了这个问题。

这不完整,但您需要垂直和水平定义约束。这是完整的,但希望能给你一个想法让你开始。

 // Vertical alignment should be centered
 NSArray *constraints = [NSLayoutConstraint
  constraintsWithVisualFormat:@"V:|[_imageView]-[_label1]-[_textBlock1]-[label2]-[textBlock2]-|"
                      options:NSLayoutFormatAlignAllCenterY
                      metrics:nil
                      views:viewsDictionary];

// Tell the views/text blocks to take the entire width. The labels will be fine centered on them I think
NSArray *constraints = [NSLayoutConstraint
  constraintsWithVisualFormat:@"H:|-[_imageView]-|"
                      options:NSLayoutFormatAlignAllCenterY
                      metrics:nil
                      views:viewsDictionary];

NSArray *constraints = [NSLayoutConstraint
  constraintsWithVisualFormat:@"H:|-[_textBlock1]-|"
                      options:nil
                      metrics:nil
                      views:viewsDictionary];

NSArray *constraints = [NSLayoutConstraint
  constraintsWithVisualFormat:@"H:|-[_textBlock2]-|"
                      options:nil
                      metrics:nil
                      views:viewsDictionary];