2015-07-31 3 views
0

У меня есть UITextView внутри статического UITableViewCell стесненного так:Expand UITableViewCell, когда размер содержимого изменяется

Picture

В методе viewDidLoad() мой стол класса представления я хочу, чтобы иметь возможность изменить текст UITextView, имеют размер изменения UITextView, чтобы он соответствовал тексту (у меня отключена прокрутка в UITextView), а затем UITableViewCell по-прежнему ограничивается, как я и предполагал. Это моя попытка сделать так:

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.tableView.delegate = self 

    self.aboutTextView.text = "Some Long String" 

    //implement self sizing cells 
    tableView.rowHeight = UITableViewAutomaticDimension 
    tableView.estimatedRowHeight = 400.0 

    //set the frame of the UITextView to match the size of the text 
    let fixedWidth = aboutTextView.frame.size.width 
    let newSize = aboutTextView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) 
    var newFrame = aboutTextView.frame 
    newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height) 
    aboutTextView.frame = newFrame; 
    //This is returning the new size correctly 

    //Reload the tableview, nothing happens, text view remains the same size as in the storyboard 
    self.tableView.reloadData() 
} 

Хотя новый кадр больше, чем размер по умолчанию в раскадровке, ничего не происходит, когда Tableview перезагружается. Я попробовал setNeedsLayout() в UITextView и не повезло. Я также попытался ограничить высоту UITextView и изменить константу высоты через IBOutlet, но тогда ограничения по очевидным причинам нарушаются. Кто-нибудь знает, почему мой код не работает? Любой лучший способ делать то, что я пытаюсь сделать?

ответ

0

Весь код о высоте строки должен идти в вашей функции tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath). Таким образом, всякий раз, когда таблица перезагружается, код будет выполнен снова, изменив высоту таблицы.

Редактировать: Я совершенно неправильно понял, что вы делали. В раскадровке попробуйте добавить ограничения к UITextView внутри ячейки и дать ему ограничение на высоту, а затем убедитесь, что ячейка также имеет ограничение по высоте, немного превышающее ограничение по ширине UITextView.

+0

Я поместил код высоты строки в этот метод делегата и вернул IBOutlet статического UITableViewCell. Все называлось правильно, но ничего не было решено. –

+0

Почему вы возвращаете IBOutlet? Вы должны создать новый cll или использовать идентификатор повторного использования для создания новых ячеек. – dunnmifflsys

+0

Это _static_ cell. Идентификатор повторного использования полезен только в том случае, если я собираюсь сделать несколько его экземпляров. –

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