2014-12-31 2 views
5

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

enter image description here

Как вы можете видеть, изображение в ячейке не отображается, как, как я хочу. Я попытался установить высоту UIImageView на 320.0 в override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell, но не помогает вообще.

Вопрос: как я могу заставить камеру уважать высоту изображения?

FYI:

  1. Я не перекрывая func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
  2. Я не устанавливаю ограничение высоты на UIImageView или что-нибудь, я использую только Прокладку организовать просмотры.
  3. Изображение с дисплеем с использованием аспектный подход режим.

Edit:

я двинулся дальше, чтобы добавить ограничение высоты к картине:

class MyTableViewPostCell: UITableViewCell { 
    @IBOutlet weak var contentLabel: UILabel! 
    @IBOutlet weak var pictureImageView: UIImageView! 
    @IBOutlet weak var pictureImageViewHeightConstraint: NSLayoutConstraint! 
} 

class MyTableViewController: UITableViewController { 
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 1 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("MyTableViewPostCell") as MyTableViewPostCell 
     cell.contentLabel.text = "This is a very very very very very very very long content." 
     cell.pictureImageViewHeightConstraint.constant = 320 
     cell.pictureImageView.sd_setImageWithURL(NSURL(string: "http://somedomain.com/pic")) 
     return cell 
    } 
} 

И я получил ограничение ошибку конфликта при запуске. Смотрите ниже:

(
    "<NSLayoutConstraint:0x7ff7b5026c30 V:[UIImageView:0x7ff7b50289e0(40)]>", 
    "<NSLayoutConstraint:0x7ff7b5029a90 V:[UIImageView:0x7ff7b5029990(320)]>", 
    "<NSLayoutConstraint:0x7ff7b502a630 UIImageView:0x7ff7b50289e0.top == UITableViewCellContentView:0x7ff7b5028910.topMargin + 6>", 
    "<NSLayoutConstraint:0x7ff7b502a770 V:[UIImageView:0x7ff7b50289e0]-(12)-[UILabel:0x7ff7b5029390'This is a very very very ...']>", 
    "<NSLayoutConstraint:0x7ff7b502a950 V:[UILabel:0x7ff7b5029390'This is a very very very ...']-(10)-[UIImageView:0x7ff7b5029990]>", 
    "<NSLayoutConstraint:0x7ff7b502aa40 UITableViewCellContentView:0x7ff7b5028910.bottomMargin == UILabel:0x7ff7b5029c20'Label'.bottom + 10>", 
    "<NSLayoutConstraint:0x7ff7b502aa90 V:[UIImageView:0x7ff7b5029990]-(17)-[UILabel:0x7ff7b5029c20'Label']>", 
    "<NSLayoutConstraint:0x7ff7b2cae430 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7ff7b5028910(283.5)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7ff7b5029a90 V:[UIImageView:0x7ff7b5029990(320)]> 

Я не знаю, где UIView-Encapsulated-Layout-Height приходит, но кажется, что это вызывает конфликт. Любой способ исправить это? Благодаря!

+0

Смотрите этот пост: [Использование Auto Layout в UITableView для динамических макетов ячейки и переменной высоты строки] (http://stackoverflow.com/questions/18746929/using -auto-макет-в-UITableView-для-динамических клеточно-макетов переменная высота строки) – zisoft

ответ

5

Для прошивки 7 и ниже

использования AutoLayout и добавить ограничения должным образом, а затем использовать метод UITableViewCellHeightForRow для динамической высоты.

Для прошивки 8 и выше

tableView.estimatedRowHeight = 44.0 
tableView.rowHeight = UITableViewAutomaticDimension 
Смежные вопросы