Изменить переменную / int, когда строка пуста - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь вычислить высоту метки, чтобы я мог динамически установить высоту ее ячейки.Это работает нормально, как это:

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.

Однако, когда я не добавляю комментарий,Я хотел бы вернуть 0 для commentHeight, но вместо этого 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)

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Если вам нужно изменить размер метки на основе ее содержимого, вы можете установить 0 в количестве строк, используя конструктор интерфейса.Тогда метка автоматически изменит размер для вас.

0 голосов
/ 25 сентября 2018

Самый простой способ исправить это:

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 голосов
/ 25 сентября 2018

Переменная существует внутри фигурных скобок, где она была объявлена ​​только.Попробуйте это:

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...