UITextView 使用自动布局自动调整大小

Posted

技术标签:

【中文标题】UITextView 使用自动布局自动调整大小【英文标题】:UITextView auto resize with autolayout 【发布时间】:2014-04-25 08:03:03 【问题描述】:

我正在为 UICollectionView 构建一种状态项。我的问题是当我想向状态区域添加一些文本时,我无法自动调整为新文本的大小。我开启了自动布局,并且尝试了在 stacky 上找到的各种东西。

我认为最接近正确的是:

-(UICollectionViewCell *) collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

    StatusItemModel *statusModel = [self.items objectAtIndex[indexPath indexPosition:0]];
    StatusItemEventCell *statusCell = [collectionView dequeueResusableCellwithReuseIdentifier: @"EventStatusItem" forIndexPath:indexPath];

    statusCell.statusTitleLabel.text = [statusModel.statusDetails valueForKey:@"title"];
    statusCell.statusContentTextView.text = [statuaModel.statusDetails valueForKey:@"content"];
    [statusCell layoutIfNeeded];
    return statusCell;


// After which I believe we have to do some magic in this but what?

- (CGSize) collectionView:(UiCollectionView *) collectionView layout:(UICollectionViewLayout *) collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

    // How do I get the size of the textview statusContentTextView.text?
    // With that I'll be able to figure out what needs to be returned.
    return CGSizeMake(299.f, 200.f);

自动布局设置了单元格中所有元素的约束。我什至玩过内在大小和占位符,但现在还是运气。请有人指出我正确的方向。

【问题讨论】:

看看这个。希望对你有帮助***.com/questions/7754851/… 【参考方案1】:

所以在绕圈思考有更好的方法之后,我们需要知道大小才能为集合视图设置单元格的大小。相当适得其反,因为有时我们在运行时不知道它的大小。我解决这个问题的方法是创建一个模拟 UITextView 对象,然后调用sizeThatFits

这就是我对我的代码所做的:

- (CGSize) collectionView:(UICollectionView *) collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

    StatusItemModel *statusModel = [self.items objectAtIndex:[indexPath indexAtPosition:0]];
    UITextView *temporaryTextView = [[UITextView alloc] init];
    temporaryTextView.text = [statusModel.statusDetails valueForKey:@"content"];
    CGSize textBoxSize = [temporaryTextView sizeThatFits:CGSizeMake(299.0f, MAXFLOAT)];
    // Can now use the height of the text box to work out the size of the cell and
    // the other components that make up the cell
    return textBoxSize;

【讨论】:

以上是关于UITextView 使用自动布局自动调整大小的主要内容,如果未能解决你的问题,请参考以下文章

在 UIScrollView 中自动调整 UITextView 的大小

使用自动布局的 UITableView 中的动态 UITextView 高度?

iOS 故事板 - 自动布局不会调整子视图的大小和位置

调整 UIView 的大小以在关闭自动布局的情况下包装其内容

使用自动布局调整超级视图和所有超级视图的兄弟姐妹的大小

在自定义 UITableViewCell 中调整 UITextView 的大小