gpt4 book ai didi

ios - UICollectionViewCell 中的 UILabel 布局怪异

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:36:33 27 4
gpt4 key购买 nike

我在 UICollectionViewCell 子类中放置两个标签很奇怪。原型(prototype)单元是在 InterfaceBuilder 中构建的,没有分配布局约束。当 Controller 为单元格分配标题和日期时,我会触发布局过程,在其中我根据报告的高度覆盖标签的位置。

奇怪的是,当单元格最初显示时,标签位置是正确的。但是当单元格滚动到屏幕外然后重新显示滚动回屏幕时,布局是正确的!

Here's a link to a screen recording

我在标题标签上设置了半透明的红色,在日期标签上设置了半透明的蓝色。标题标签应对齐以适合文本(最多两行),日期标签应具有相同的宽度,并位于正下方。在视频中您可以看到,直到滚动到屏幕外,标题标签的高度不正确,日期标签与其重叠。

- (void)setTitle:(NSString *)title
{
_title = [title copy];
self.titleLabel.text = _title;
self.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;
self.titleLabel.numberOfLines = 2;
[self.titleLabel sizeToFit];
[self setNeedsLayout];
}

- (void)setDate:(NSDate *)date
{
_date = [date copy];
self.dateLabel.text = [self.class.sharedShortDateFormatter stringFromDate:_date];
self.dateLabel.lineBreakMode = NSLineBreakByWordWrapping;
self.dateLabel.numberOfLines = 1;
[self.dateLabel sizeToFit];
[self setNeedsLayout];
}

- (void)layoutSubviews
{
[super layoutSubviews];

#warning MMBFiguresCollectionViewCell doesn't lay out its labels on first display - only works on second
self.titleLabel.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.0875];
self.dateLabel.backgroundColor = [[UIColor blueColor] colorWithAlphaComponent:0.0875];

const CGRect LabelFrame = self.titleLabel.frame;
const CGRect StarFrame = self.favoriteButton.frame;

self.titleLabel.frame = CGRectMake(CGRectGetMinX(LabelFrame), CGRectGetMinY(LabelFrame), CGRectGetMinX(StarFrame) - CGRectGetMinX(LabelFrame), CGRectGetHeight(LabelFrame));
self.dateLabel.frame = CGRectMake(CGRectGetMinX(self.titleLabel.frame), CGRectGetMaxY(self.titleLabel.frame), CGRectGetWidth(self.titleLabel.frame), CGRectGetHeight(self.dateLabel.frame));

NSLog(@"self.titleLabel.frame: %@ dateLabel.frame: %@", NSStringFromCGRect(self.titleLabel.frame), NSStringFromCGRect(self.dateLabel.frame));
}

当我观察 NSLog 语句中报告的帧时,我发现帧值看起来是正确的。当滚动到屏幕外并重新打开时,帧值是相同的 - 所以我知道帧正在被正确计算。

那么我必须假设 CALayer 位图缓存(或类似的东西)正在缓存 View 的预布局渲染?

注意:出于效率原因,我选择在 -layoutSubviews 中放置标签并使用 setNeedsLayout。我还尝试(刚刚)将标签定位分解为一个单独的方法,并在标题和日期标签更改时直接调用它 - 但它具有相同的效果。

最佳答案

因此,我放弃了使用“聪明”的手动布局,而只是使用了 IB 精心挑选的布局约束——瞧,它奏效了。

老实说,我认为我无法在这种情况下成功使用自动布局,但它确实有效。谁知道?

关于ios - UICollectionViewCell 中的 UILabel 布局怪异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21740072/

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