我正在尝试计算标签的高度,以便可以动态设置其单元格的高度。这样可以正常工作:
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)
}
但是这会返回使用未解析的标识符'commentHeight'来返回我的CGSize(其中需要commentHeight)。
有关如何实现此目的的任何提示或技巧,以便如果没有文本,则commentHeight将为0?
(显示的所有代码都在sizeForItemAt方法内部)
答案 0 :(得分:0)
变量只存在于大括号内,而在此处未声明。试试这个:
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)
}
答案 1 :(得分:0)
最简单的纠正方法是:
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
或??
,则我更愿意这样做
答案 2 :(得分:-1)
如果您需要根据标签的内容调整标签的大小,则可以使用界面生成器将行数设置为0。然后,标签将自动为u调整大小。