我正在尝试计算标签的高度,以便我可以动态设置其单元格的高度。这工作正常,如下所示:
let commentText = itemsFeed[indexPath.item].comment
let commentRect = NSString(string: commentText!).boundingRect(with:CGSize(width: rectWidth, height: 1000), options: NSStringDrawingOptions.usesFontLeading.union(NSStringDrawingOptions.usesLineFragmentOrigin), attributes: [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 16)], context: nil)
let commentHeight = ceil(commentRect.height)
这将返回所有正确的值,我可以根据 commentHeight 动态设置高度。
但是,当我不添加注释时,我想为 commentHeight 返回 0,而是 Swift 返回 20(单行标签的默认高度(。如何覆盖它?
我试图添加这样的 if 语句:
if(commentText?.isEmpty)! {
let commentHeight = 0
} else {
let commentText = itemsFeed[indexPath.item].comment
let commentRect = NSString(string: commentText!).boundingRect(with:CGSize(width: rectWidth, height: 1000), options: NSStringDrawingOptions.usesFontLeading.union(NSStringDrawingOptions.usesLineFragmentOrigin), attributes: [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 16)], context: nil)
let commentHeight = ceil(commentRect.height)
}
但这在我的CGSize的返回中返回使用未解析的标识符"commentHeight">(其中需要commentHeight(。
关于如何实现这一点的任何提示或技巧,以便在没有文本的情况下 commentHeight 为 0?
(提供的所有代码都在 sizeForItemAt 方法内(
变量存在于大括号内,仅声明它。试试这个:
let commentHeight: CGFloat
if(commentText?.isEmpty)! {
commentHeight = 0
} else {
let commentText = itemsFeed[indexPath.item].comment
let commentRect = NSString(string: commentText!).boundingRect(with:CGSize(width: rectWidth, height: 1000), options: NSStringDrawingOptions.usesFontLeading.union(NSStringDrawingOptions.usesLineFragmentOrigin), attributes: [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 16)], context: nil)
commentHeight = ceil(commentRect.height)
}
最简单的方法是:
let commentHeight: CGFloat = commentText?.isEmpty == true ? 0 : ceil(NSString(string: itemsFeed[indexPath.item].comment!).boundingRect(with:CGSize(width: rectWidth, height: 1000), options: NSStringDrawingOptions.usesFontLeading.union(NSStringDrawingOptions.usesLineFragmentOrigin), attributes: [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 16)], context: nil).height)
(如果避免强制展开,并在处理选项时使用if-let
或guard
或??
,我更喜欢它(
如果您需要根据标签的内容调整标签的大小,您可以使用界面生成器在行数中设置 0。然后标签将自动为您调整大小。