UItextview 没有按预期扩展约束

Posted

技术标签:

【中文标题】UItextview 没有按预期扩展约束【英文标题】:UItextview not expanding with constraints as expected 【发布时间】:2014-04-22 22:46:15 【问题描述】:

我正在使用界面生成器来创建 xib。这个 xib 有一个包含 uitextview 的 uiview。两者都应该随着 uitextview 中的文本更改而调整大小。约束看起来很像这样:

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

在大多数情况下,这是可行的。很长的文本部分会按预期将两个视图的大小调整到最大允许范围,如果只有一两个单词,则视图会保持较小。但是,问题在于您的句子很短。

在这种情况下,视图仅扩展至大约 189 像素,即使有空间可扩展,文本也会移动到第二行。

这就是你只输入几个词时的样子:

这是一个完全展开的盒子:

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

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

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

使用该方法获取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;

【讨论】:

【参考方案2】:

关键是将preferredMaxLayoutWidth 设置为较大的值(320px 听起来不错。无论如何你的正确约束都会限制它)。

你可以在你的代码中这样做

[self.label setPreferredMaxLayoutWidth:320];

或者从 Interface Builder 如下:

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

【讨论】:

uitextview 不是 uilabel,也没有 preferredMaxLayoutWidth【参考方案3】:

您是否尝试过本文中提出的解决方案?

Dynamic expand UITextView on ios 7

我相信你必须将你的 UITextView 设置为 sizeToFit

[YourUITextView sizeToFit];

【讨论】:

恐怕这根本没有帮助。我也按照您链接的帖子中的建议放置在不同的区域。似乎都没有工作。也许重要的是要注意我正在使用界面生成器来设置这些

以上是关于UItextview 没有按预期扩展约束的主要内容,如果未能解决你的问题,请参考以下文章

如何向标签添加约束,使其始终与动态的 UITextView 相距 0 点?

MariaDB“更新级联”约束没有按预期工作?

Oracle SQL - REGEXP_LIKE 在 CHECK 约束中没有按预期工作

为啥我的 UITextView 在我使用 frame 属性时出现,但在我使用约束时却没有?

在 UITableViewCell 内展开 UITextView

UITableViewCell 未按预期显示约束