Ios7 UItextview未按预期使用约束展开

Ios7 UItextview未按预期使用约束展开,ios7,interface-builder,uitextview,xib,Ios7,Interface Builder,Uitextview,Xib,我正在使用interface builder创建xib。此xib具有包含uitextview的uiview。当uitextview中的文本发生变化时,这两个视图都应该调整大小。约束看起来很像这样: 粉红色的UITextView推送蓝色的superview。蓝色uiView的最小宽度为189 px,尾部约束至少为8px 这在很大程度上是可行的。非常长的文本部分会根据预期最大程度地调整两个视图的大小,如果只有一个或两个单词,则视图会保持较小。然而,问题是当你有一个简短的句子 在本例中,视图仅扩展到

我正在使用interface builder创建xib。此xib具有包含uitextview的uiview。当uitextview中的文本发生变化时,这两个视图都应该调整大小。约束看起来很像这样:

粉红色的UITextView推送蓝色的superview。蓝色uiView的最小宽度为189 px,尾部约束至少为8px

这在很大程度上是可行的。非常长的文本部分会根据预期最大程度地调整两个视图的大小,如果只有一个或两个单词,则视图会保持较小。然而,问题是当你有一个简短的句子

在本例中,视图仅扩展到约189px,文本将移动到第二行,即使有扩展空间

下面是当你只说几句话时的情景:

这是一个完全展开的框:

我曾尝试使尾部约束的优先级低于其他约束,并尝试以多种方式修改内容拥抱和抗压缩属性,但均未成功

如何使视图展开,使其以最少的行数适合文本内容?对高度没有限制,只对宽度有限制


任何帮助都将不胜感激

您是否尝试过本文中介绍的解决方案

我相信您必须将UITextView设置为sizeToFit

[YourUITextView sizeToFit];

使用此方法获取textView的新大小

CGSize sz = [_textView.text sizeWithFont:_textView.font]
如果这对高度不起作用,请获取您刚才从preivous方法获得的宽度,并在下一种方法中使用,以获得您需要的适当高度

- (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;
}

关键是将preferredMaxLayoutWidth设置为较大的值(320px听起来不错。您的正确约束将限制它)

您可以在代码中这样做

[self.label setPreferredMaxLayoutWidth:320];
或从界面生成器中执行以下操作:

这样,您将看到标签按预期展开:


恐怕这根本没用。我根据你链接的帖子中的建议,在不同的区域放置了一个标签。似乎没有一个起作用。可能需要注意的是,我正在使用界面生成器设置UITextView不是uilabel,也没有首选的MaxLayoutWidth