2016-06-07 4 views
0

Я создал прототип UITableViewCell на раскадровке. Он содержит 1 ImageView, 3 ярлыка для отображения содержимого. Все элементы управления имеют выходы в соответствующем подклассе UITableViewCell. Я показываю сообщения, которые могут быть многострочными. Поэтому я должен был добавить следующие методыТекст, перекрывающий ячейки uitableview в iOS swift

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension 
    } 

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension 
    } 

Текст этикетки становится перекрывается, и это происходит всякий раз, когда я прокручивать TableView. Это происходит только с первых двух строк или последней строки. Но когда я искал в google, я обнаружил, что это может произойти в любой строке в любое время. Вот мой код расширения, который обычно записывается.

extension ConversationViewController: UITableViewDataSource, UITableViewDelegate { 
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     if let count = selectedConversation?.msgArrayWithBodyText.count { 
      return count 
     } 
     return 0 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCellWithIdentifier(conversationMessageIdentifier, forIndexPath: indexPath) as! ConversationMessageTableViewCell 
     let currMsg = selectedConversation.msgArrayWithBodyText[indexPath.row] 
     cell.userFullNameLabel.text = currMsg.senderName 
     cell.dateLabel.text = selectedConversation.getShortDateForMessage(currMsg.timeSent) 
     cell.messageBodyLabel.text = currMsg.bodyText //Constants.testString 

     let imageUrl = "\(Constants.serverUrl)/api/users/\(currMsg.senderId)/profilePicture" 
     if let item = ImageCache.sharedInstance.objectForKey(imageUrl) as? CacheableItem { 
      print("\(imageUrl) found in cache, expiresAt: \(item.expiresAt)") 
      cell.userImageView.image = UIImage(data: item) 
     } else { 
      cell.userImageView.image = UIImage(named: "Profile") 

      self.imageDownLoadingQueue.addOperationWithBlock({ 
       if let url = NSURL(string: imageUrl) { 
        if let purgableData = NSPurgeableData(contentsOfURL: url) { 
         if let downloadedImage = UIImage(data: purgableData) { 
          print("cache: \(imageUrl)") 

          let item = CacheableItem() 
          item.setData(purgableData) 
          ImageCache.sharedInstance.setObject(item, forKey: imageUrl) 

          NSOperationQueue.mainQueue().addOperationWithBlock({ 
           if let updateCell = tableView.cellForRowAtIndexPath(indexPath) as? ConversationMessageTableViewCell { 
            updateCell.userImageView.image = downloadedImage 
           } 
          }) 
         } 
        } 
       } 
      }) 
     } 
     //cell.clipsToBounds = true 
     return cell 
    } 

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension 
    } 

    func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension 
    } 

    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
     if cell.respondsToSelector(Selector("setSeparatorInset:")) { 
      cell.separatorInset = UIEdgeInsetsZero 
     } 
     if cell.respondsToSelector(Selector("setLayoutMargins:")) { 
      cell.layoutMargins = UIEdgeInsetsZero 
     } 
     if cell.respondsToSelector(Selector("setPreservesSuperviewLayoutMargins:")) { 
      cell.preservesSuperviewLayoutMargins = false 
     } 

     cell.backgroundColor = UIColor.clearColor() 
     cell.backgroundView = UIView(frame:cell.frame) 
     if(cell.backgroundView?.layer.sublayers?.count > 1){ 
      cell.backgroundView?.layer.sublayers?.removeAtIndex(0) 
     } 
     let layer = self.getGradientLayer(indexPath.row) 
     cell.backgroundView?.layer.insertSublayer(layer, atIndex: 0) 

    } 
} 

А вот подкласс UITableViewCell я написал для protyped клетки.

class ConversationMessageTableViewCell: UITableViewCell { 
    @IBOutlet weak var userImageView: UIImageView! 
    @IBOutlet weak var dateLabel: UILabel! 
    @IBOutlet weak var userFullNameLabel: UILabel! 
    @IBOutlet weak var messageBodyLabel: UILabel! 

    @IBOutlet weak var messageBodyLabelHeightConstraint: NSLayoutConstraint! 

    override func awakeFromNib() { 
     super.awakeFromNib() 
     // Initialization code 

     userImageView.layer.borderColor = UIColor.clearColor().CGColor 
     userImageView.layer.borderWidth = 1.0 
     userImageView.layer.cornerRadius = (userImageView.frame.height/2) 
     userImageView.clipsToBounds = true 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 

     // Configure the view for the selected state 
    } 

Вот отредактированный снимок экрана (я почернела из имени и лица)

This is what happens

Помощь требуется!

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

В основном, это происходит только в том случае, если я несколько раз просматриваю таблицу вверх и вниз. Весь текст отображается правильно, когда tableview загружается, но затем помещается вверх, а затем очищается на некоторое время и снова беспорядочно.

+0

Вы добавили ограничение на такие метки, как горизонтальный интервал? –

+0

Да, все это добавлено. Ограничения и все в порядке. Он просто перекрывается. –

+0

Должны быть некоторые проблемы с ограничениями. Каков ваш ожидаемый результат? –

ответ

0

Я нашел решение этой проблемы. В панели рассказов есть опция, которая гласит «Контекст прозрачной графики», который в основном очищает графику для метки до ее перерисовки.

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