gpt4 book ai didi

ios - 是什么导致具有相同自动布局约束的两个 UITableViewCells 表现不同?

转载 作者:行者123 更新时间:2023-11-29 00:35:24 25 4
gpt4 key购买 nike

我正在使用 AFCollectionView在表格中,它没有按照我的预期呈现。为了调试该问题,我创建了另一个具有所需布局的自定义表格单元格,并将其放入 AFCollectionView 单元格中。 Collection View 单元格仍然无法正确渲染。

这两个单元都是在没有 xib 或 Storyboard的情况下构建的,因此我正在努力尝试调试自动布局控制台问题。我知道 UICollectionView 比 UIView 更复杂,但鉴于显示的问题,我不确定从哪里开始尝试进行更改。

enter image description here

两个单元格都具有从 - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 方法内部调用的以下 updateConstraints 方法。

    [self updateConstraints];
return self;
}

- (void)updateConstraints{
[super updateConstraints];

//Create local versions of the ivars
UILabel *titleLabelP = self.titleLabel;
UIView *bottomViewP = self.collectionView;
NSNumber *bottomViewHeightP = [NSNumber numberWithInteger:self.bottomViewHeight];


//Build the visual constraints
NSDictionary *views = NSDictionaryOfVariableBindings(titleLabelP, bottomViewP);
NSDictionary *metrics = @{ @"padding" : @8.0, @"viewHeight": bottomViewHeightP };

// title and bottom view fill the width of the superview (cell content view)
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-padding-[titleLabelP]-padding-|" options:0 metrics:metrics views:views]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-padding-[bottomViewP]-padding-|" options:0 metrics:metrics views:views]];
// title and bottom view are setup vertically with 8px of padding between. The cell should expand to fit the full size of the bottom view.
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-padding-[titleLabelP]-padding-[bottomViewP(viewHeight)]-padding-|" options:0 metrics:metrics views:views]];

}

自动布局问题的控制台日志:

2016-11-21 14:19:06.423003 AutoLayoutTableCellTest[71645:4731377] [Warning] Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
2016-11-21 14:19:06.425136 AutoLayoutTableCellTest[71645:4731377] [LayoutConstraints] 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)
(
"<NSAutoresizingMaskLayoutConstraint:0x608000096710 h=--& v=--& UITableViewCellContentView:0x7fb87ac1a770.midY == 22.25 (active)>",
"<NSAutoresizingMaskLayoutConstraint:0x6080000966c0 h=--& v=--& UITableViewCellContentView:0x7fb87ac1a770.height == 44.5 (active)>",
"<NSLayoutConstraint:0x608000095860 V:|-(8)-[UILabel:0x7fb87ac1b670'CURRENT INDEXPATH ROW: 1'] (active, names: '|':AFTableViewCell:0x7fb87b050400'CellIdentifier' )>",
"<NSLayoutConstraint:0x608000095900 AFIndexedCollectionView:0x7fb87b051000.height == 150 (active)>",
"<NSLayoutConstraint:0x608000095950 V:[AFIndexedCollectionView:0x7fb87b051000]-(8)-| (active, names: '|':UITableViewCellContentView:0x7fb87ac1a770 )>",
"<NSLayoutConstraint:0x608000095fe0 V:[UILabel:0x7fb87ac1b670'CURRENT INDEXPATH ROW: 1']-(8)-[AFIndexedCollectionView:0x7fb87b051000] (active)>",
"<NSAutoresizingMaskLayoutConstraint:0x608000095180 h=-&- v=--& 'UIView-Encapsulated-Layout-Top' AFTableViewCell:0x7fb87b050400'CellIdentifier'.minY == 0 (active, names: '|':UITableViewWrapperView:0x7fb87b03b800 )>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x608000095fe0 V:[UILabel:0x7fb87ac1b670'CURRENT INDEXPATH ROW: 1']-(8)-[AFIndexedCollectionView:0x7fb87b051000] (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
2016-11-21 14:19:06.425934 AutoLayoutTableCellTest[71645:4731377] [LayoutConstraints] 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)
(
"<NSAutoresizingMaskLayoutConstraint:0x608000096710 h=--& v=--& UITableViewCellContentView:0x7fb87ac1a770.midY == 22.25 (active)>",
"<NSAutoresizingMaskLayoutConstraint:0x6080000966c0 h=--& v=--& UITableViewCellContentView:0x7fb87ac1a770.height == 44.5 (active)>",
"<NSLayoutConstraint:0x608000095860 V:|-(8)-[UILabel:0x7fb87ac1b670'CURRENT INDEXPATH ROW: 1'] (active, names: '|':AFTableViewCell:0x7fb87b050400'CellIdentifier' )>",
"<NSLayoutConstraint:0x6080000958b0 V:[UILabel:0x7fb87ac1b670'CURRENT INDEXPATH ROW: 1']-(8)-[AFIndexedCollectionView:0x7fb87b051000] (active)>",
"<NSLayoutConstraint:0x608000095900 AFIndexedCollectionView:0x7fb87b051000.height == 150 (active)>",
"<NSLayoutConstraint:0x608000095950 V:[AFIndexedCollectionView:0x7fb87b051000]-(8)-| (active, names: '|':UITableViewCellContentView:0x7fb87ac1a770 )>",
"<NSAutoresizingMaskLayoutConstraint:0x608000095180 h=-&- v=--& 'UIView-Encapsulated-Layout-Top' AFTableViewCell:0x7fb87b050400'CellIdentifier'.minY == 0 (active, names: '|':UITableViewWrapperView:0x7fb87b03b800 )>"
)

Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x6080000958b0 V:[UILabel:0x7fb87ac1b670'CURRENT INDEXPATH ROW: 1']-(8)-[AFIndexedCollectionView:0x7fb87b051000] (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

我已将示例项目放在 github @ https://github.com/propstm/AutoLayoutTableCellTest

编辑以使用 COLLECTIONVIEW 显示单元格的初始化:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if (!(self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) return nil;

UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
layout.sectionInset = UIEdgeInsetsMake(10, 10, 9, 10);
layout.itemSize = CGSizeMake(100, 100);

layout.scrollDirection = UICollectionViewScrollDirectionVertical;
self.collectionView = [[AFIndexedCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:CollectionViewCellIdentifier];
[self.collectionView setTranslatesAutoresizingMaskIntoConstraints:FALSE];
self.collectionView.backgroundColor = [UIColor whiteColor];
self.collectionView.showsHorizontalScrollIndicator = NO;
[self.contentView addSubview:self.collectionView];
if(!self.titleLabel){
self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(16, 8, self.frame.size.width-8, 20)];
[self.titleLabel setTranslatesAutoresizingMaskIntoConstraints:FALSE];
UIFont *boldFont = [UIFont fontWithName:@".SFUIText-Bold" size:16.0f];
[self.titleLabel setFont:boldFont];
[self addSubview:self.titleLabel];
}

self.bottomViewHeight = 150;

[self updateConstraints];
return self;
}

最佳答案

通过以下更改,我能够消除这些自动布局警告:

  • 在您的 AFTableViewCell-initWithStyle:reuseIdentifier: 方法中,在返回之前,设置单元格的 contentView 的 translatesAutoresizingMaskIntoConstraints 属性NO
  • 将标题标签添加到单元格的内容 View ,而不是单元格本身。

这会导致出现新的警告:

[Warning] Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.

但是,布局似乎更接近您的预期。

关于ios - 是什么导致具有相同自动布局约束的两个 UITableViewCells 表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40727986/

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