UITextView根据约束条件未按预期扩展

3
我正在使用Interface Builder创建一个xib文件。这个xib包含一个UIView,其中包含一个UITextView。两者都应该随着UITextView中的文本更改而调整大小。约束看起来很像这样:
粉色UITextView向蓝色父视图推进。蓝色UIView的最小宽度为189像素,并且有至少8像素的尾部约束。
在大多数情况下,这个方法是有效的。当文本非常长时,两个视图会按预期的最大限度进行调整,如果只有一两个单词,视图会保持较小。然而,问题出现在短句子的情况下。
在这种情况下,即使有足够的空间扩展,视图也仅扩展到约189px,文本移动到第二行。
以下是放入几个单词后的样子:
这是完全展开的盒子:
我试过将尾部约束的优先级降低,以及以许多方式修改内容拉伸和压缩阻力属性,但都没有成功。
如何使视图扩展以适合文本内容并占用最少的行数?高度没有任何限制,只有宽度有限制。
感谢您的帮助!
3个回答

0
使用该方法获取textView的新大小。
CGSize sz = [_textView.text sizeWithFont:_textView.font]

如果用高度做不好,可以从先前的方法中获取到刚才得到的宽度,并在下一个方法中使用以获得所需的适当高度

- (CGFloat)textViewHeightForAttributedText:(NSAttributedString *)text andWidth:(CGFloat)width
{
    UITextView *textView = [[UITextView alloc] init];

    [textView performSelectorOnMainThread:@selector(setAttributedText:)
                                    withObject:text
                                 waitUntilDone:YES];

    CGSize size = [textView sizeThatFits:CGSizeMake(width, FLT_MAX)];
    return size.height;
}

0

关键是将preferredMaxLayoutWidth设置为较大的值(320像素听起来不错。您的右侧约束将无论如何限制它)。

您可以在代码中这样做

[self.label setPreferredMaxLayoutWidth:320];

或者从界面构建器中按照以下步骤操作:

Setting properties from Interface Builder

这样你就会看到标签按预期扩展:

Example


1
uitextview不是uilabel,也没有preferredMaxLayoutWidth属性。 - GreatWiz

-1
你尝试过这篇文章中提出的解决方案吗? 在iOS 7上动态扩展UITextView 我相信你需要将UITextView设置为sizeToFit。
[YourUITextView sizeToFit];

很抱歉,那并没有任何帮助。我已经按照你提供的链接中的建议,在不同的区域进行了尝试,但似乎都没有起作用。或许需要注意的是,我正在使用界面构建器来设置这些内容。 - vvMINOvv

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