gpt4 book ai didi

ios - 动态 UILabel 大小 iOS 7 问题

转载 作者:行者123 更新时间:2023-12-01 16:36:30 25 4
gpt4 key购买 nike

我正在尝试根据文本高度动态调整标签大小。 UILabel 中的高度可以从 0 到多行不等。我已经为这个问题想出了一个解决方案,它在 iOS 8 上运行良好,但在我试图支持的 iOS 7.1 上却失败了。

此项目中未使用自动布局,所有约束均以编程方式完成。

代码如下:

//TableDelegate.m

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 85.0f;
}

//CustomTableViewCell.m
-(UILabel *)commentTextLabel
{
if(!_commentTextLabel)
{
_commentTextLabel = [UILabel new];
_commentTextLabel.numberOfLines = 0;
_commentTextLabel.translatesAutoresizingMaskIntoConstraints = NO;
}

return _commentTextLabel;
}




-(void)setupViews
{
[self.contentView addSubview:self.profilePictureView];
[self.contentView addSubview:self.userName];
[self.contentView addSubview:self.timePublishedLabel];
[self.contentView addSubview:self.commentTextLabel];
[self.contentView addSubview:self.seeMoreButton];

self.backgroundColor = [UIColor salooteInputTextBg];
self.contentView.backgroundColor = [UIColor salooteInputTextBg];

NSDictionary *views = @
{
@"picture" : self.profilePictureView,
@"userName" : self.userName,
@"timePublished" : self.timePublishedLabel,
@"text" : self.commentTextLabel,
@"seeMore" : self.seeMoreButton
};

[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[picture(38)]-5-[userName]-5-[timePublished]-5-|" options:0 metrics:nil views:views]];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[picture]-5-[text]-5-|" options:0 metrics:nil views:views]];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[seeMore]-5-|" options:0 metrics:nil views:views]];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[userName]-5-[text]-5-[seeMore]-5-|" options:0 metrics:nil views:views]];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[picture(38)]" options:0 metrics:nil views:views]];

}

-(void)updateConstraints
{
[super updateConstraints];
}

iOS 8 结果(左) iOS 7.1 结果(右)

enter image description here
enter image description here
我没有在我的代码中为 UILabel 设置任何高度约束,而是试图让约束为我调整垂直高度。如果有人对如何使其在 iOS 7.1 上正常工作有一些意见,我将不胜感激。

将约束移动到 setupViews 会产生这样的结果:(iOS 7.1 顶部 iOS 8 底部)

enter image description here

enter image description here

最佳答案

在我看来,您没有向 commentTextLabel 添加垂直约束。 ?你只有这个:

//Comment text
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[picture]-5-[text]-0-|" options:0 metrics:nil views:views]];

尝试设置一个垂直约束——很可能你得到了约束不足的错误,iOS 8 比 iOS 7 更好地猜测高度。另外,如果你在 View 中添加约束,你不应该调用 sizeToFit setter/getter 内部。

Autolayout is not being used in this project and all constraints are done programatically.



即使您仅以编程方式添加约束,您仍在使用 Autolayout。 :)

回应编辑

您的垂直高度限制不足 - 您只指定了 commentTextLabel 的高度但不是它的 y 坐标。请记住,Autolayout 的主要目标是提供一组完整的约束,以便 iOS 可以计算 View 的 x、y、宽度和高度。

我认为你的限制总体上被搞砸了。 :) 尝试将这些规则添加到内容 View 中(我只是将 5 用于任何填充):
H:|-5-[picture(38)]-5-[username]-5-[timePublished]-5-|
H:[picture]-5-[text]-5-|
H:|-5-[seeMore]-5-|
V:|-5-[username]-5-[text]-5-[seeMore]-5-|
V:|-5-[picture(38)]

此外,在 setupViews 中添加您的约束。 --你应该只需要添加一次你的约束并且只在 updateConstraints中修改它们.我认为 updateConstraints每次调用 layoutSubviews被调用,因此每次刷新单元格的布局时都会不断添加约束。

回应编辑

您的标签的自动换行样式也必须设置。从 commentTextLabel 内部, 添加
_commentTextLabel.lineBreakMode = NSLineBreakByWordWrapping;

始终将其设置为 numberOfLines = 0如果你想要一个具有动态高度的 UILabel。

您还需要通过设置该标签的 alignment 来右对齐您的 seeMore 标签(它占据单元格的整个宽度减去填充)属性(property)。

现在尝试提供更大的人造高度——也许是 150 或 200 而不是 85,这样我们就可以看到所有元素。

对于 timePublished 标签,我忘记指出以下垂直约束:
V:|-5-[timePublished]

关于ios - 动态 UILabel 大小 iOS 7 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27788390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com