根据内容自动增加视图的高度

Posted

技术标签:

【中文标题】根据内容自动增加视图的高度【英文标题】:Automatically Grow a View's Height Based on It's Content 【发布时间】:2016-02-11 13:26:06 【问题描述】:

情况

我有一个(垂直)UIStackView,其中包含在我的故事板中定义的高度为 50(名为 sliderView)的普通 UIView 和高度为 36UILabel。标签的 alpha 属性最初设置为 0.0 以使其不可见。

在控制器的viewDidLoad 中,我使用UIViewController Containment 将另一个视图控制器的视图添加到sliderView 的子视图中。这个新的子视图不一定匹配sliderViews 高度。它实际上可能更高一些。

起初,这个设置看起来不错。一旦我使标签可见,我看到它仍然从50 的 y 位置开始。因此,sliderView 不会自动拉伸以使用它的新孩子的身高。有道理。

问题

我认为我可以轻松地在sliderView 上调用sizeToFit 以使这两个高度适合。不幸的是,这似乎不起作用。我在这里误解了什么吗?谢谢!

【问题讨论】:

【参考方案1】:

使用以下方法获取NSString 文本所需的CGSize

- (CGSize)getHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font 
CGSize size = CGSizeZero;
if (text) 
    CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@ NSFontAttributeName:font  context:nil];
    size = CGSizeMake(frame.size.width, frame.size.height+20.0f);

return size;

这里的width 参数是label 的宽度,font 是为label 指定的字体。拨打CGSize.height获取身高。

【讨论】:

嗯,谢谢你的回复,但这不是我要找的。标签非常好。我需要调整sliderView 的大小。

以上是关于根据内容自动增加视图的高度的主要内容,如果未能解决你的问题,请参考以下文章

如何动态调整滚动视图高度

Interface Builder 中的自动布局根据外部视图的宽度/高度更改布局

根据 contentSize 增加 tableview 的高度

如何根据swift 3中的集合视图高度动态增加表格视图高度?

如何根据标签文本快速更改表格视图单元格高度?

动态表视图高度