2015-07-06 9 views
4

Использование UITableView в Swift, может кто-то, пожалуйста, помогите мне автоматически изменить высоту ячейки на основе ярлыка, изображения и описания, пожалуйста?Автоматическое изменение высоты ячейки на основе содержимого - Swift

Вся информация проходит правильно, мне просто нужна помощь в ее форматировании.

Я попытался настроить его, используя cell.frame.size.height, но это не повлияло. Я мог бы изменить размер ячейки в раскадровке, но мне хотелось бы, чтобы она была более динамичной, если это было возможно.

Спасибо заранее!

Моя клетка выглядит следующим образом:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell 

     // Creator 
     let creator = self.photos[indexPath.row].creator 
     let user = UILabel() 
     user.frame = CGRectMake(self.headerView.frame.origin.x, self.headerView.frame.origin.y + self.headerView.frame.height + 3, self.view.frame.width, 12) 
     user.text = creator 
     cell.addSubview(user) 

     // Photo 
     let picture = self.photos[indexPath.row].image() 
     let imageView = UIImageView(image: picture!) 
     imageView.frame = CGRectMake(user.frame.origin.x, user.frame.origin.y + user.frame.height, self.view.frame.width, 400) 
     imageView.contentMode = UIViewContentMode.ScaleAspectFit 
     cell.addSubview(imageView) 

     // Photo description 
     let description = UITextView() 
     let des = self.photos[indexPath.row].photoDescription 
     description.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y + imageView.frame.height, self.view.frame.width, 65) 
     if des != nil { 
      description.text = des! 
      description.font = UIFont.systemFontOfSize(16) 
      description.editable = false 
      description.scrollEnabled = false 
     } 
     cell.addSubview(description) 

     cell.frame.size.height = user.frame.size.height + imageView.frame.size.height + description.frame.size.height + 30 

     return cell 
    } 
+0

Вам нужно узнать об автоматическом макете и о том, как ячейки корректируют свою собственную высоту на основе их содержимого и ограничений макета для этого содержимого. – matt

+0

Какова высота вашей ячейки в зависимости от размера текста или высоты изображения? – mumu

ответ

7

Для того, чтобы клетка авто ощутимое, что вам нужно сделать две вещи:

  1. Используйте autolayout расположить элементы внутри вашей клетки. Ограничения нижнего пространства и верхнего пространства будут подталкивать размер ячейки по мере необходимости.
  2. Набор tableView.rowHeight = UITableViewAutomaticDimension в вашем viewDidLoad
5

Если высота ячейки зависит от размера текста, то выполните следующее: Добавить метод в ViewController.swift

func calculateHeight(inString:String) -> CGFloat { 
    let messageString = inString 
    let attributes : [String : Any] = [NSFontAttributeName : UIFont.systemFont(ofSize: 15.0)] 

    let attributedString : NSAttributedString = NSAttributedString(string: messageString, attributes: attributes) 

    let rect : CGRect = attributedString.boundingRect(with: CGSize(width: 222.0, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, context: nil) 

     let requredSize:CGRect = rect 
     return requredSize.height 
} 

Установите ширину текста метка Затем назовите эту функцию:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
      heightOfRow = self.calculateHeight(inString: conversations[indexPath.row].description) 

      return (heightOfRow + 60.0) 
    } 

Для Basic клетки:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
      return UITableViewAutomaticDimension 
    } 

Эта функция не будет работать для пользовательских ячеек.

Если высота ячейки зависит от высоты изображения, а затем вернуть высоту изображения + someFloatValueAccordingToYourChoice.

Надеюсь, что это сработает.

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