gpt4 book ai didi

ios - 自定义 UICollectionViewCell 自动布局 NSInternalInconsistencyException 错误

转载 作者:可可西里 更新时间:2023-11-01 03:27:49 25 4
gpt4 key购买 nike

我正在对 UICollectionViewCell 进行子类化,并使用自动布局在代码中完成所有布局。这是我的初始化方法:

- (id)initWithFrame:(CGRect)frame{
frame = CGRectMake(0, 0, 403, 533);
if (self = [super initWithFrame:frame]) {
self.translatesAutoresizingMaskIntoConstraints = NO;

PBCardPricesViewController *pricesView = [[PBCardPricesViewController alloc] init];
[self addSubview:pricesView.view];

UIImageView *background = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"CardBackground"]];
[self addSubview:background];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-(20)-[background]|" options:0 metrics:nil views:@{@"background":background}]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:pricesView.view attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:background attribute:NSLayoutAttributeLeft multiplier:1 constant:0]];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[background]|" options:0 metrics:nil views:@{@"background":background}]];
[self addConstraint:[NSLayoutConstraint constraintWithItem:pricesView.view attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:background attribute:NSLayoutAttributeTop multiplier:1 constant:0]];
}

return self;
}

当我注释掉 translateAutoresizingMask 行时,我得到:

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:0x1d83f540 H:[UIImageView:0x1d83f950]-(0)-| (Names: '|':PBCardViewCollectionCell:0x1d83b970 )>",

"<NSAutoresizingMaskLayoutConstraint:0x1c55ad20 h=--& v=--& H:[PBCardViewCollectionCell:0x1d83b970(393)]>",

"<NSAutoresizingMaskLayoutConstraint:0x1c559410 h=--& v=--& UIImageView:0x1d83f950.midX == + 191.5>",

"<NSAutoresizingMaskLayoutConstraint:0x1c559450 h=--& v=--& H:[UIImageView:0x1d83f950(383)]>"

)



Will attempt to recover by breaking constraint

<NSLayoutConstraint:0x1d83f540 H:[UIImageView:0x1d83f950]-(0)-| (Names: '|':PBCardViewCollectionCell:0x1d83b970 )>



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.

如果我没有得到这个错误:由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“执行 -layoutSubviews 后仍需要自动布局。” UICollectionView 的 -layoutSubviews 实现需要调用 super.'我如何让它以我想要的方式显示?我错过了什么?

最佳答案

发表我的评论作为答案:

根据我的经验,collectionViewCells(和 tableViewCells)需要它们的 autoresizingmask 否则它们会抛出您看到的异常。但是由于您添加的 subview ,您会遇到约束冲突,因此只需从其 subview 中删除 mask 即可:

backgroundView.translatesAutoresizingMaskIntoConstraints = NO;  
pricesView.view.translatesAutoresizingMaskIntoConstraints = NO; // you might get it to work without doing this line

我也试着记住移除我使用 alloc 创建的 View 的掩码(即不是来自 xib),因为大多数时候它们会产生冲突。

关于ios - 自定义 UICollectionViewCell 自动布局 NSInternalInconsistencyException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13870581/

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