2014-09-14 2 views
0

У меня есть настраиваемый UITableViewCell, и я пытаюсь Автокомпоновка в UILabel, потому что его текст может иметь любую длину, но я получаю эту ошибку:IOS, NSLayoutConstraint Выпуск

Break on objc_exception_throw to catch this in the debugger. 
     The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 
     2014-09-14 10:20:37.693 InstantForum[29658:60b] Unable to simultaneously satisfy constraints. 
      Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
     (
      "<NSLayoutConstraint:0x9aea2e0 V:|-(45)-[UILabel:0x9ae9f30] (Names: '|':UITableViewCellContentView:0x9ae9250)>", 
      "<NSLayoutConstraint:0x9aea330 V:[UILabel:0x9ae9f30(>=10)]>", 
      "<NSLayoutConstraint:0x9aea380 V:[UILabel:0x9ae9f30]-(NSSpace(20))-| (Names: '|':UITableViewCellContentView:0x9ae9250)>", 
      "<NSAutoresizingMaskLayoutConstraint:0x8c8a750 h=--& v=--& V:[UITableViewCellContentView:0x9ae9250(44)]>" 
     ) 

     Will attempt to recover by breaking constraint 
     <NSLayoutConstraint:0x9aea380 V:[UILabel:0x9ae9f30]-(NSSpace(20))-| (Names: '|':UITableViewCellContentView:0x9ae9250)> 

     Break on objc_exception_throw to catch this in the debugger. 
     The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful 

Это код в моей UITableViewCell , это где я установки на подвиды в клетке:

-(void)setupView:(PostInfo*)postInfo{ 


      CGRect screenRect = [[UIScreen mainScreen] bounds]; 
      viewPostMessage = [[UIView alloc] initWithFrame:CGRectMake(10, 10, screenRect.size.width - 20, 100)]; 
      viewPostMessage.backgroundColor = [UIColor colorWithRed:193.0f/255 green:193.0f/255 blue:193.0f/255 alpha:1.0f]; 
      viewPostMessage.layer.borderColor = [UIColor blackColor].CGColor; 
      viewPostMessage.layer.borderWidth = 0.5f; 


      dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

      // 3) Load picker in background 

      userImage = [[UIImageView alloc] initWithFrame:CGRectMake(10, 10, 30, 30)]; 
      [self.contentView addSubview:userImage]; 


      if(postInfo.userImage.length > 0){ 
      __block UIImage *imageUser; 

      dispatch_async(concurrentQueue, ^{ 

       imageUser = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString: [NSString stringWithFormat:@"http://www.hugt.co.uk/userimage/%d/userImage.jpg", postInfo.userId]]]]; 

       dispatch_async(dispatch_get_main_queue(), ^{ 

       userImage.image = imageUser; 

       }); 

      }); 


      }else{ 
      UIView *viewImage = [[UIView alloc] initWithFrame:CGRectMake(10, 10, 30, 30)]; 
      viewImage.backgroundColor = [UIColor colorWithRed:132.0f/255 green:132.0f/255 blue:132.0f/255 alpha:1.0f]; 
      [self.contentView addSubview:viewImage]; 

      userImage = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 20, 20)]; 
      UIImage *imageUser = [UIImage imageNamed:@"defaultuser.jpg"]; 
      userImage.image = imageUser; 
      [viewImage addSubview:userImage]; 
      } 

      labelUserName = [[UILabel alloc] initWithFrame:CGRectMake(50, 8, 200, 16)]; 
      labelUserName.textColor = [UIColor colorWithRed:56.0f/255 green:56.0f/255 blue:57.0f/255 alpha:1.0f]; 
      labelUserName.text = [NSString stringWithFormat:@"%@ %@ posted...", postInfo.firstName,postInfo.lastName]; 
      //labelFirstName.textAlignment = NSTextAlignmentCenter; 
      labelUserName.font = [UIFont fontWithName:@"Helvetica" size:12]; 
      labelUserName.userInteractionEnabled = YES; 
      [self.contentView addSubview:labelUserName]; 

      labelCreated = [[UILabel alloc] initWithFrame:CGRectMake(50, 24, 200, 16)]; 
      labelCreated.textColor = [UIColor colorWithRed:86.0f/255 green:152.0f/255 blue:179.0f/255 alpha:1.0f]; 
      labelCreated.text = [NSDateFormatter localizedStringFromDate:postInfo.timeStampCreated dateStyle:NSDateFormatterMediumStyle timeStyle:NSDateFormatterMediumStyle]; 
      labelCreated.text = [labelCreated.text stringByReplacingOccurrencesOfString:@"AM" withString:@""]; 
      labelCreated.text = [labelCreated.text stringByReplacingOccurrencesOfString:@"PM" withString:@""]; 
      //labelFirstName.textAlignment = NSTextAlignmentCenter; 
      labelCreated.font = [UIFont fontWithName:@"Helvetica" size:12]; 
      labelCreated.userInteractionEnabled = YES; 
      [self.contentView addSubview:labelCreated]; 

      labelMessage = [[UILabel alloc] initWithFrame:CGRectMake(50, 43, 210, 9999)]; 
      labelMessage.textColor = [UIColor colorWithRed:141.0f/255 green:142.0f/255 blue:142.0f/255 alpha:1.0f]; 
      labelMessage.text = postInfo.message; 
      //labelMessage.numberOfLines = 0; 
      //labelFirstName.textAlignment = NSTextAlignmentCenter; 
      labelMessage.font = [UIFont fontWithName:@"Helvetica" size:12]; 
      labelMessage.userInteractionEnabled = YES; 
      labelMessage.lineBreakMode = NSLineBreakByWordWrapping; 
      labelMessage.translatesAutoresizingMaskIntoConstraints = NO; 
      [labelMessage sizeToFit]; 
      [self.contentView addSubview:labelMessage]; 

      //NSDictionary *views = NSDictionaryOfVariableBindings(labelMessage); 
      //labelMessage.translatesAutoresizingMaskIntoConstraints = NO; 





      [self.contentView addConstraints:[NSLayoutConstraint 
          constraintsWithVisualFormat:@"V:|-45-[labelMessage(>=10)]-|" 
          options:NSLayoutFormatDirectionLeadingToTrailing 
          metrics:nil 
          views:NSDictionaryOfVariableBindings(userImage,labelUserName,labelCreated,labelMessage)]]; 

      [self.contentView addConstraints:[NSLayoutConstraint 
          constraintsWithVisualFormat:@"H:|-10-[labelMessage(==210)]-|" 
          options:NSLayoutFormatDirectionLeadingToTrailing 
          metrics:nil 
          views:NSDictionaryOfVariableBindings(userImage,labelUserName,labelCreated,labelMessage)]]; 
      //self.contentView.translatesAutoresizingMaskIntoConstraints = NO; 
      //self.clipsToBounds = YES; 
      //[self.contentView addSubview:viewPostMessage]; 

     } 

ответ

1

вертикальное ограничение определяется как имеющий запас 45 пунктов от верхней части супер зрения, запасом по умолчанию 20 пунктов от нижней части супер-просмотр и минимальная высота надписи 10 баллов. Это означает, что минимальная высота contentView должна составлять 75 баллов. Чтобы эти ограничения соответствовали без ошибок, вам придется уменьшить поля или увеличить размер contentView.

Чтобы удалить ограничение по умолчанию по умолчанию, вы можете просто удалить черту, как показано здесь.

@"V:|-45-[labelMessage(>=10)]|" 

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

Вот пример устранения ограничения на трейлинг.

@"H:|-10-[labelMessage(==210)]" 
Смежные вопросы