Ios 子视图宽度不适合具有自动布局的superview

Ios 子视图宽度不适合具有自动布局的superview,ios,autolayout,Ios,Autolayout,我正在向UICollectionViewCell添加子视图。我以编程方式添加约束,使其填充单元格,但宽度不填充单元格 当我在视图调试器中查看它时,它表示位置不明确。既然我指定所有4条边都固定到superview,这怎么可能呢 这是调试器中视图的外观。内部白色视图应适合父视图的宽度(蓝色边框): 检查父视图上的约束会显示“位置不明确”警告: 我使用的代码如下: [self.contentView addSubview:calloutView]; calloutView.translatesAu

我正在向UICollectionViewCell添加子视图。我以编程方式添加约束,使其填充单元格,但宽度不填充单元格

当我在视图调试器中查看它时,它表示位置不明确。既然我指定所有4条边都固定到superview,这怎么可能呢

这是调试器中视图的外观。内部白色视图应适合父视图的宽度(蓝色边框):

检查父视图上的约束会显示“位置不明确”警告:

我使用的代码如下:

[self.contentView addSubview:calloutView];
calloutView.translatesAutoresizingMaskIntoConstraints = NO;
self.contentView.translatesAutoresizingMaskIntoConstraints = NO;

[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[calloutView]-0-|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(calloutView) ]];
[self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[calloutView]-0-|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(calloutView) ]];

问题似乎与contentView的使用有关,您必须使用单元格本身来实现您想要的功能,这是代码和工作方式,请查看下图

#import "CollectionViewCell.h"

@interface CollectionViewCell()
@property UIView * testView;
@end


@implementation CollectionViewCell

@synthesize testView;

-(void)awakeFromNib
{
    [super awakeFromNib];

    testView = [[UIView alloc]initWithFrame:CGRectZero];
    testView.translatesAutoresizingMaskIntoConstraints = NO;

    [self addSubview:testView];

    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-2-[testView]-2-|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(testView) ]];
    [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-2-[testView]-2-|" options:NSLayoutFormatDirectionLeadingToTrailing metrics:nil views:NSDictionaryOfVariableBindings(testView) ]];

    self.testView.layer.borderWidth = 2;
    self.testView.layer.borderColor = [UIColor blueColor].CGColor;
}

@end


我希望这对您有所帮助,祝您好运

您在哪里使用此代码?UICollectionViewDelegate创建一个单元格,然后调用包含此代码的单元格设置方法,但此代码位于单元格或viewController中?此代码位于单元格内的设置方法中我将尝试重现您的问题谢谢。使用contentView时是否再现了该问题?我刚刚将其删除,但未看到任何更改:(@zorro2b我发布了你问题的答案,是的,我重现了你的问题,解决方案是,使用单元格本身而不是contentView来添加你的代码创建视图,并在那里设置你的约束,正如我的代码所示,它最有效!)regards@zorro2b我的回答最终对你有帮助吗?非常感谢,我现在正在工作。我的错误是当时,我已经在单元格和子视图中将TranslatesAutoResizengMaskintoConstraints设置为NO。一旦我删除了它以匹配您的示例,它就可以正常工作了!