在自定义单元格中获取正确的标签宽度时遇到问题。 这是我在故事板中的单元格:
创建表时,我知道当调用cellForRowAtIndexPath时,单元格刚刚创建,尚未添加到UITableView,因此标签的宽度为304px。这导致结果如下:
滚动后,单元格已添加到UITableView中,因此显示正确,标签宽度为164px。
在将细胞/标签添加到UITableView之前,有没有办法知道细胞/标签的确切宽度?
以下是源代码:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell: ArticleCell = tableView.dequeueReusableCellWithIdentifier("articleCell", forIndexPath: indexPath) as! ArticleCell
let item = array.objectAtIndex(indexPath.row) as! Article
cell.showDataForArticle(item, dateFormatter: dateFormatter)
return cell
}
func showDataForArticle(article: Article, dateFormatter: NSDateFormatter) {
self.titleLbl.text = article.articleTitle
titleHeightConstraint.constant = titleLbl.requiredHeight() <--- where problem happens
self.thumbnailImgView.imageLink(article.articleThumbnailLink!)
self.authorLbl.text = article.articleCreator
self.dateLbl.text = dateFormatter.stringFromDate(article.articlePubDate!)
}
extension UILabel {
func requiredHeight() -> CGFloat {
let frame = CGRectMake(0, 0, self.frame.size.width, CGFloat.max)
let label: UILabel = UILabel(frame: frame)
label.numberOfLines = 0
label.lineBreakMode = .ByWordWrapping
label.font = self.font
label.text = self.text
label.sizeToFit()
return label.frame.size.height
}
答案 0 :(得分:0)
尝试在titleLbl.requiredHeight()
方法
func tableView(_ tableView: UITableView,
willDisplayCell cell: UITableViewCell,
forRowAtIndexPath indexPath: NSIndexPath)
答案 1 :(得分:0)
就试图获得标签的宽度而言,你只尝试了一些
的行self.YourLabelName.bounds.width
答案 2 :(得分:0)
您可以根据使用自动布局显示的文字调整其高度。
<强> 1。为此,您不应为单元格设置静态高度,只需添加以下两个代表,
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 44;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
<强> 2。您应该为您的单元格设置从上到下的约束 在您的情况下,您的标题标签应包含TopSpace到Cell,LeadingSpace到ImageView,TrailingSpace到Cell(标准间距)和BottomSpace到AuthorLabel(标准间距)。
第3。根据文本,您想要的动态高度标签应该将行数设置为0,将LineBreakMode设置为Word Wrap。
多数民众赞成,也发现此链接与您的情况相似,