如何使用scrollview

时间:2015-09-04 09:54:09

标签: ios objective-c xcode autolayout

我有一个屏幕布局,其中有两个可调整大小的标签,其中包含多行文字。这些标签放在其父视图中,实体将添加到主内容视图中,然后将主内容视图添加到scrollView(这就是大多数解决方案所建议的内容)。对于这两个标签(在附加的第一个图像中的约和时间和位置标签下面)我将高度约束设置为“大于或等于”并将numberOfLines设置为0以及调用SizetoFit,但实际输出不是预期的(见第二张图片)。没有约束警告。为所有元素提供了所有约束。

enter image description here

enter image description here

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(父视图)应该在ScrollView内滚动,因为总高度将大于可用的屏幕。

***问题我认为标签的外部视图没有根据标签调整大小,因为下面的所有视图都没有重新定位****

2 个答案:

答案 0 :(得分:1)

请尝试此解决方案,

1。将高度约束添加到Label的superView。
2。添加该约束的IBOutlet
3。添加此方法以查找文本的高度 你需要给出你的标签的超级视图的宽度,这样宽度将与你的超级视图相同
4。现在获取Height表单返回CGRect并将其分配给Constraints的常量。它应该像

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 :(得分:0)

这是最终有效的。

  1. 在主视图中添加了ScrollView
  2. 将View添加为contentView(请确保将其重命名为设计器而不是仅查看)
  3. 使用前导顶部和底部空间限制将scrollview固定到主视图。
  4. 将内容视图固定为与上面相同的滚动视图
  5. 添加了具有各自约束的所有组件
  6. 使用"大于或等于约束(这是必要的)设置要调整大小的UILabel的高度,并在代码中将行数设置为0
  7. 标签的父视图不应具有任何固定高度,但有足够的约束来在运行时计算它。
  8. 确保ScrollView在计算contentSize时没有歧义。
  9. imp - 在主视图,scrollview,contentView的宽度上添加约束(在我的情况下,你可能不需要在contentView和scrollview之间使用相等的宽度约束,但在contentView和主视图之间需要它的必要) 现在,scrollview完全按照它所需的方式滚动。 我相信我已经做过的大部分上述事情,但不知怎的,它不起作用,删除了所有内容,并再次做了所有的事情,并且有效。