首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IOS、NSLayoutConstraint问题

IOS、NSLayoutConstraint问题
EN

Stack Overflow用户
提问于 2014-09-14 17:23:05
回答 1查看 67关注 0票数 0

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

代码语言:javascript
复制
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中的代码,这是我在单元格中设置子视图的位置:

代码语言:javascript
复制
-(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];

        }
EN

回答 1

Stack Overflow用户

发布于 2014-09-14 18:25:31

垂直约束被定义为具有距超级视图顶部45点的边界、距超级视图底部20点的默认边界以及10点的最小标签高度。这意味着contentView的最小高度应该是75点。要使这些约束符合要求而不出现任何错误,您必须减小contentView的页边距或增大其大小。

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

代码语言:javascript
复制
@"V:|-45-[labelMessage(>=10)]|"

可能还需要调整水平约束。它的约束被定义为从超级视图左侧算起10个点,从超级视图右侧算起的默认边距,标签的确切宽度为210点。您可能希望删除这三个约束中的一个,以防止任何冲突。

下面是一个删除拖尾约束的示例。

代码语言:javascript
复制
@"H:|-10-[labelMessage(==210)]"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25831844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档