2015-10-26 5 views
0

Я изучаю это уже более суток, и я могу честно сказать, что я полностью в шоке от того, почему это не работает, как я ожидал бы этого.Изменение размера UITableViewCell на основе содержимого UILabel

Я пытаюсь развернуть UITableViewCell, когда выбран правильный размер на основе UILabel внутри него. Я использовал следующий код для определения требуемого размера для UILabel:

extension UILabel { 

    func requiredHeight() -> CGFloat{ 

     let label:UILabel = UILabel(frame: CGRectMake(0, 0, self.frame.width, CGFloat.max)) 
     label.text = self.text 
     label.numberOfLines = 0 
     label.font = self.font 

     label.sizeToFit() 


     print("Final Size - \(label.frame.height)") 
     return label.frame.height + 10 
    } 
} 

Мой вопрос, несмотря на этот размер - когда клетка изменяется в методе «heightForRowAtIndexPath» - это еще не правильный размер и строка усекается, это видно на рисунке ниже.

enter image description here

отметить - я собираю необходимый размер ячейки, как только загрузится вид и текст был заселен в UILabel.

requiredHeight = overviewLabel.requiredHeight() 
     if requiredHeight > overviewCell.frame.height { 
      expander.hidden = false 
     } else { 
      expander.hidden = true 
     } 

Любые советы о том, как это можно исправить, будут очень признательны.

ответ

2

Попробуйте этот фрагмент. Просто укажите точное название и размер шрифта

Swift 3.x

func requiredHeight() -> CGFloat{ 
    let font = UIFont(name: "Helvetica", size: 16.0) 
    let label:UILabel = UILabel(frame: CGRect(x:0, y:0, width:200, height:CGFloat.greatestFiniteMagnitude)) 
    label.numberOfLines = 0 
    label.lineBreakMode = NSLineBreakMode.byWordWrapping 
    label.font = font 
    label.text = self.text 
    label.sizeToFit() 
    return label.frame.height + //Add some space as a part of your bottom and top constraint 
} 

Swift 2,2

func requiredHeight() -> CGFloat{ 
    let font = UIFont(name: "Helvetica", size: 16.0) 
    let label:UILabel = UILabel(frame: CGRectMake(0, 0, 200, CGFloat.max)) 
    label.numberOfLines = 0 
    label.lineBreakMode = NSLineBreakMode.ByWordWrapping 
    label.font = font 
    label.text = self.text 
    label.sizeToFit() 
    return label.frame.height + //Add some space as a part of your bottom and top constraint 
} 

Пусть ваш Лабе л имеет верхнее и нижнее ограничение в 5 и 5 соответственно, они делают возвращение заявление как

return label.frame.height + 10 

ПРИМЕЧАНИЯ: - ширина должна быть шириной вы хотите этикеток. Это должно быть в соответствии с вашими UITableView или UIView

+0

О, ничего себе, это было так просто. Могу ли я спросить, почему для этого требуется, чтобы шрифт был определен вручную? Я нахожу это чрезвычайно странным, я не могу использовать 'label.font = self.font' –

+0

Это сработало для вас? –

+0

Я тоже однажды попался в ту же проблему. Может быть какая-то странная проблема, что label.font = self.font не работает. Я искал где-то, что просто предоставляет точный шрифт и размер того, что использует UILabel с небольшим количеством ограничений. По крайней мере, это сработало для меня, как насчет тебя? –

Смежные вопросы