Reputation: 2337
I have a Custom UITableViewCell and I'm trying to Auto Layout a UILabel because its text could have any length, but i get this error:
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
This is the code in my UITableViewCell, this is where i setup the subviews in the cell:
-(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];
}
Upvotes: 0
Views: 74
Reputation: 51
The vertical constraint is defined as having a margin of 45 points from the top of the super view, a default margin of 20 points from the bottom of the super view, and a minimum label height of 10 points. That means the minimum height of the contentView should be 75 points. To get these constraints to fit without any errors, you'll have to reduce the margins or increase the size of the contentView.
To remove the default margin constraint you can simply remove the dash as shown here.
@"V:|-45-[labelMessage(>=10)]|"
The horizontal constraint may also need to be adjusted. It's constraint is defined as 10 points from left of the super view, a default margin from the right of the super view, and the label is given an exact width of 210 points. You may want to remove one of those three constraints to prevent any conflicts.
Here's an example of removing the trailing constraint.
@"H:|-10-[labelMessage(==210)]"
Upvotes: 1