如何使这个自动布局安排与滚动视图工作

我有一个屏幕布局,其中有两个可resize的标签,其中将包含多行文本。 这些标签放在他们的父视图中,这个实例被添加到主contentView中,主contentView然后被添加到scrollView(这就是大多数解决scheme所build议的)。 对于这两个标签(下面的关于和时间和位置标签在第一个图像附加)我已经设置高度约束为“大于或等于”,并将numberOfLines设置为0以及调用SizetoFit,但实际输出不是预期的见附图二)。 没有限制警告。 所有的约束都提供给所有的元素。

在这里输入图像说明

在这里输入图像说明

viewDidLoad中的代码如下标签之一。

self.lblAbout.text = @"this is a long two three lines about string which will have two lines this is a long two three lines about string which will have two lines"; self.lblAbout.numberOfLines = 0; [self.lblAbout sizeToFit]; [self.lblAbout setPreferredMaxLayoutWidth:244.0]; 

 -(void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; scrollView.contentSize = contentView.frame.size; } 

不需要任何额外的约束条件,我已经添加了所有前导,尾随,顶部,底部约束以及需要的高度,再加上所有视图之间的间隔。 我想要的是标签应该被调整为行数和contentView(父视图)应滚动内滚动视图总高度将大于可用屏幕。

***问题我认为标签的外部视图没有按照标签进行调整,因此下面的所有视图都没有被重新定位。

请尝试这个解决scheme,

1.将高度约束添加到您的标签的超级查看。
2.添加该约束的IBOutlet
3.添加这个方法来找出你的文本的高度,你需要给你的标签的超级视图的宽度,所以宽度将与你的超级视图相同
4.现在得到高度forms返回CGRect并将其分配给您的约束的常量。 应该是这样的

 heightConstraint.constant = youObject.size.height; 

请确保你已经相应地添加了其他约束。 如果不是,则还需要相应地增加其他超级高度的高度。

 (CGRect)sizeOfDetailLabelFromString:(NSString*)string maxWidth:(CGFloat)maxWidth{ NSDictionary *attributes = @{NSFontAttributeName:FONT_LIGHT}; CGRect rect = [string boundingRectWithSize:CGSizeMake(maxWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:attributes context:nil]; return rect; } 

这是最后的工作。

  1. 在主视图中添加了ScrollView
  2. 添加视图作为contentView(一定要在devise器中重新命名,而不仅仅是视图)
  3. 固定滚动视图到主视图使用领先的拖尾顶部和底部空间约束。
  4. 固定的contentView与上面的滚动视图相同
  5. 添加了各自的约束条件
  6. 设置UILabel的高度,我想resize使用“大于或等于约束(这是必要的),并在代码中设置行数为0
  7. 标签的父视图不应该有任何固定的高度,但有足够的约束来在运行时计算它。
  8. 确保ScrollView在计算contentSize时没有歧义。
  9. imp – 为主视图,scrollview,contentView的宽度添加约束(在我的情况下,contentView和scrollview之间可能不需要相等的宽度约束,但contentView和主视图之间的约束是必要的)现在,scrollview按照需要滚动。 我相信大部分上述的事情,我已经做了,但不知何故,它没有工作,删除了一切,再次做了所有的事情几次,它的工作。