gpt4 book ai didi

IOS,NSLayoutConstraint 问题

转载 作者:行者123 更新时间:2023-11-29 02:40:46 26 4
gpt4 key购买 nike

我有一个自定义 UITableViewCell,我正在尝试自动布局 UILabel,因为它的文本可以有任意长度,但我收到此错误:

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 中的代码,这是我在单元格中设置 subview 的位置:

-(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];

}

最佳答案

垂直约束定义为距离 super View 顶部有 45 点的边距,距离 super View 底部的默认边距为 20 点,最小标签高度为 10 点。这意味着 contentView 的最小高度应该是 75 点。要使这些约束正确无误地适应,您必须减少边距或增加 contentView 的大小。

要删除默认边距限制,您可以简单地删除破折号,如下所示。

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

水平约束也可能需要调整。它的约束定义为距离 super View 左侧 10 点,距离 super View 右侧的默认边距,标签的精确宽度为 210 点。您可能希望删除这三个约束之一以防止任何冲突。

这是一个删除尾随约束的示例。

@"H:|-10-[labelMessage(==210)]"

关于IOS,NSLayoutConstraint 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25831844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com