2016-05-30 2 views
1

Я получаю следующий вывод об ошибке:Ограничения Конфликт UICollectionVIew

The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 
 
2016-05-29 20:02:36.092 City[353:33890] Unable to simultaneously satisfy constraints. 
 
\t Probably at least one of the constraints in the following list is one you don't want. 
 
\t Try this: 
 
\t \t (1) look at each constraint and try to figure out which you don't expect; 
 
\t \t (2) find the code that added the unwanted constraint or constraints and fix it. 
 
\t (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
 
(
 
    "<NSAutoresizingMaskLayoutConstraint:0x1461c600 h=--& v=--& UIView:0x14629380.midX == + 80.2612>", 
 
    "<NSAutoresizingMaskLayoutConstraint:0x1461c630 h=--& v=--& H:[UIView:0x14629380(64.5225)]>", 
 
    "<NSAutoresizingMaskLayoutConstraint:0x1451e6a0 h=--& v=--& UIView:0x1460ac80.midX == + 172.364>", 
 
    "<NSAutoresizingMaskLayoutConstraint:0x1451e6d0 h=--& v=--& H:[UIView:0x1460ac80(283.272)]>", 
 
    "<NSLayoutConstraint:0x1461dbd0 UITextView:0x14b15000'Fabian Delph has been dro...'.leading == UIView:0x14629380.leading + 8>", 
 
    "<NSLayoutConstraint:0x1451e500 UITextView:0x14b15000'Fabian Delph has been dro...'.leading == UIView:0x1460ac80.leading + 8>" 
 
) 
 

 
Will attempt to recover by breaking constraint 
 
<NSLayoutConstraint:0x1461dbd0 UITextView:0x14b15000'Fabian Delph has been dro...'.leading == UIView:0x14629380.leading + 8> 
 

 
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. 
 
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

Все мнения, в моем UICollectionViewCell созданы программно в приведенном ниже способом, за исключением messageTextView, который определенных в раскадровке. Я знаю, что есть проблема с некоторыми авторезистирующими константами, однако я не уверен, как ее решить. Если я использую translatesAutoresizingMaskIntoConstraints = false во всей ячейке, на экране CollectionView ничего не отображается. У меня возникли проблемы с пониманием того, что относится к UiView, и что я могу сделать для решения этой проблемы.

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("message_cell" , forIndexPath: indexPath) as! DisplayMessageCollectionViewCell 

    let textBubbleView: UIView = { 
     let view = UIView() 
     view.backgroundColor = UIColor(white: 0.95, alpha: 1) 
     view.layer.cornerRadius = 15 
     view.layer.masksToBounds = true 
     return view 
    }() 
    let profileImageView: UIImageView = { 
     let imageView = UIImageView() 
     imageView.contentMode = .ScaleAspectFill 
     imageView.layer.cornerRadius = 15 
     imageView.layer.masksToBounds = true 
     imageView.backgroundColor = UIColor.redColor() 
     return imageView 
    }() 
    profileImageView.translatesAutoresizingMaskIntoConstraints = false 
    cell.messageTextView.translatesAutoresizingMaskIntoConstraints = false 

    //textBubbleView.translatesAutoresizingMaskIntoConstraints = false 

    if let messageText = chat_m[indexPath.row].text { 
     cell.messageTextView.text = messageText 
     cell.messageTextView.backgroundColor = UIColor.clearColor() 
     let sender_image = chat_m[indexPath.row].sender_image 
     cell.senderID = chat_m[indexPath.row].sender?.id 
     cell.frameView = view 
     profileImageView.image = sender_image 
     let size = CGSizeMake(250, 1000) 
     let options = NSStringDrawingOptions.UsesFontLeading.union(.UsesLineFragmentOrigin) 
     let estimatedFrame = NSString(string: messageText).boundingRectWithSize(size, options: options, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(14)], context: nil) 
     print(estimatedFrame.width) 

     if let user_id = NSUserDefaults.standardUserDefaults().stringForKey("userId") { 
      if (user_id == chat_m[indexPath.row].sender?.id) { 
       profileImageView.hidden = true 
        cell.messageTextView.frame = CGRectMake(view.frame.width - estimatedFrame.width - 16 - 8, 0, estimatedFrame.width + 16, estimatedFrame.height + 20) 
        textBubbleView.frame = CGRectMake(view.frame.width - estimatedFrame.width - 16 - 8 - 16, -4, estimatedFrame.width + 16 + 8 + 10, estimatedFrame.height + 20 + 6) 


        textBubbleView.backgroundColor = UIColor(red: (69/255.0), green: (209/255.0), blue: (153/255.0), alpha: 1.0) 
        cell.messageTextView.textColor = UIColor.whiteColor() 
      } 
      else { 
       profileImageView.hidden = false 
       cell.messageTextView.textColor = UIColor.blackColor() 
       textBubbleView.backgroundColor = UIColor(white: 0.95, alpha:1) 
        cell.messageTextView.frame = CGRectMake(48 + 3, 0, estimatedFrame.width + 15, estimatedFrame.height + 20) 
        textBubbleView.frame = CGRectMake(48, 0, estimatedFrame.width + 20, estimatedFrame.height + 20) 


      } 
     } 

    } 
    cell.addSubview(textBubbleView) 
    cell.addSubview(profileImageView) 
    cell.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-4-[v0(30)]", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": profileImageView])) 
    cell.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[v0(30)]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": profileImageView])) 
    cell.sendSubviewToBack(textBubbleView) 
    cell.addSubview(profileImageView) 
    cell.bringSubviewToFront(profileImageView) 
    cell.addConstraint(NSLayoutConstraint(item: cell.messageTextView, attribute: .Trailing, relatedBy: .Equal, toItem: textBubbleView, attribute: .Trailing, multiplier: 1, constant: 0)) 
    cell.addConstraint(NSLayoutConstraint(item:cell.messageTextView, attribute: .Leading, relatedBy: .Equal, toItem: textBubbleView, attribute: .Leading, multiplier: 1, constant: 8)) 

    return cell 
} 

ответ

0

из журнала отладки:

"<NSLayoutConstraint:0x1461dbd0 UITextView:0x14b15000'Fabian Delph has been dro...'.leading == UIView:0x14629380.leading + 8>", 
"<NSLayoutConstraint:0x1451e500 UITextView:0x14b15000'Fabian Delph has been dro...'.leading == UIView:0x1460ac80.leading + 8>" 

У вас есть два ограничения (0x1461dbd0, 0x1451e500) с тем же значением, которые связываются с различными видами. которые могут конфликтовать.

Ваш textBubbleView имеет разный фрейм, который зависит от вашей логики и не имеет надлежащих ограничений (теперь он использует по умолчанию translatesAutoresizingMaskIntoConstraints, который имеет значение ДА). У вас есть прокомментированная строка, это правильный путь, но вы также должны установить ограничения для textBubbleView так, как вы делали для profileImageView (ведущий, трейлинг, верхний, высотный - это зависит от ваших требований.

Если вы хотите, чтобы ваши messageTextView иметь расположение зависят от textBubbleView - удалить старые ограничения первым и повторно добавить его:

[messageTextView removeConstraints: [messageTextView constraints]]; 
Смежные вопросы