gpt4 book ai didi

ios - 自定义 UITableViewCell 的布局何时完成?

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

我在 Storyboard文件中定义了一个自定义表格 View 单元格。

enter image description here

此单元格包含带有几页内容的 ScrollView 和一个页面指示器。 ScrollView 、内容 View 和单元格本身都使用自动布局定义。 Page1/2/3 View 绑定(bind)为与 ScrollView 宽度相同,容器绑定(bind)为 ScrollView 宽度的 3 倍。这样我就不确定内容的大小是否适合显示三页信息,而不管屏幕大小。

我在自定义单元格类中有一个代码,用于在 ScrollView 确实滚动时更新页面指示器 - 这工作正常。

我还在单元格类中公开了从外部指定页面的方法,在这个 setter 中我正在做类似的事情:

- (void)setPage:(NSInteger)page animated:(BOOL)animated
{
CGFloat pageWidth = self.scrollView.frame.size.width;
self.pageControl.currentPage = page;
[self.scrollView setContentOffset:CGPointMake(page*pageWidth, 0) animated:animated];
}

我面临的问题是当我调用此 setter 时, ScrollView 框架和内容大小经常没有正确定义,因此页面指示器将被设置,但 ScrollView 不会更改内容偏移量。

我在哪里可以捕捉到我的单元格自动布局已完成并且我可以保证 setContentOffset 有效的时刻?我尝试从 cellForIndexPath 调用 setPage - 这显然不起作用,然后我尝试从 willDisplayCell 调用它 - 同样的故事 - 单元格本身已经正确布局,但 ScrollView 仍然有 600px(来自 Storyboard )并且它失败了。

最佳答案

我最终做了以下事情:

在自定义单元格子类中添加了layoutSubview实现

- (void)layoutSubviews
{
[super layoutSubviews];

[self.contentView layoutSubviews];

// set proper content offset
[self.scrollView setContentOffset:CGPointMake(self.frame.size.width*self.pageControl.currentPage, 0) animated:NO];
}

如果没有我直接调用 contentView 上的 layoutSubview,即使在 [super layoutSubview] 完成后, ScrollView 也没有正确的框架。

我不必将当前页码存储在内部变量中,因为 pageControl 已经保存了它,并且它是在配置原始单元格信息时设置的。

但有趣的是 - 最初我在该方法中添加了 [self.scrollView layoutSubview] 并且它在 iOS8 中工作正常,但在 iOS7 中没有做任何好事。我必须提升一级到 contentView 以确保它在 7 和 8 中都能正常工作。

关于ios - 自定义 UITableViewCell 的布局何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27050878/

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