gpt4 book ai didi

ios - 如何创建具有最大宽度的多行 UILabel?

转载 作者:行者123 更新时间:2023-12-01 17:42:46 25 4
gpt4 key购买 nike

我正在编写一个简单的 IRC 客户端,我在 Twitter 的 iOS 应用程序外观之后对其进行建模。我已经截取了 Twitter 应用程序的屏幕截图,以供引用:



它看起来像一个简单的表格 View ,每个单元格内都有一些标签。因此,在我的应用程序中,我以编程方式创建表格和单元格格式。我的自定义单元格中只有两个标签,我将它们放在另一个之上。顶部标签是一个简单的 1-liner。底部标签我想包含更长的消息,并且需要它在我指定的宽度内自动换行到多行。

我如何实现这一目标?

到目前为止,我已经尝试将标签的框架显式设置为我想要的尺寸,但如果这就是我所做的一切,它不会自动换行。它只是水平流出单元格。然后我尝试调用sizeToFit ,在 tableView:cellForRowAtIndexPath: 内功能,对于这个标签,但它似乎以非常小的宽度自动换行 - 文本在两个或三个字母之后换行,然后垂直流出单元格。

我似乎无法弄清楚如何让标签中的文本在指定宽度后换行。有任何想法吗?

我的自定义单元格类:https://github.com/ryancole/pound-client/blob/master/pound-client/views/MessageListCell.m
cellForRowAtIndexPath功能:https://github.com/ryancole/pound-client/blob/master/pound-client/controllers/MessageListViewController.m#L62-L84

编辑1:

演示当我设置 numberOfLines 时发生了什么为 0,表示无限制,我附上了被调用的屏幕截图。它在几个字符之后换行,而不是首先占用 UILabel 框架的指定宽度。这是在调用 sizeToFit 之前设置的.

最佳答案

您需要将 numberOfLines 设置为您想要的行数,或者 0 允许无限数量的行(默认值为 1)。您可能还需要将 lineBreakMode 设置为 NSLineBreakByWordWrapping(尽管这可能是默认设置)。

编辑后:如果您希望文本从顶部开始,那么我认为您必须使用可变高度的单元格,而不是为您的自定义单元格设置明确的大小。我在我的一个项目中这样做了:

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
UILabel *label = [[UILabel alloc] init];
label.numberOfLines = 0; // allows label to have as many lines as needed
label.text = _objects[indexPath.row][@"detail2"];
CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(300, 300000) lineBreakMode:NSLineBreakByWordWrapping];
CGFloat h = labelSize.height;
return h + 50;
}

我在此处创建的标签仅用于计算行高,此方法结束后将其丢弃。单元格的宽度由我在 constrainedToSize: 参数中的 300 参数确定。 +50 只是我为了让我的细胞看起来正确而添加的一个软糖因素——你可能想弄乱这个数字来得到你想要的东西。在我的自定义单元类中,我使用了 initWithStyle:reuseIdentifier,并且没有设置任何大小。

关于ios - 如何创建具有最大宽度的多行 UILabel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14075403/

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