gpt4 book ai didi

iphone - UITableView 的 tableHeaderView 高度属性在加载和旋转期间更改为奇怪的值

转载 作者:可可西里 更新时间:2023-11-01 04:40:24 27 4
gpt4 key购买 nike

我有一个自定义 UIView,我在 loadView 期间将其设置为 UITableView 的 tableHeaderView 属性:

headerView = [[MYViewClass alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 120)];
[headerView sizeToFit];

self.tableView.tableHeaderView = headerView;

View 绘制不正确,部分 View 被剪裁,表格上方有空白。旋转设备时, View 几乎消失。向后旋转时, View 现在比标题的空间更大,并遮盖了表格中的一些单元格。

为了解决问题,我覆盖了自定义 View 类中的 setFrame 方法:

- (void) setFrame:(CGRect)frame {
[super setFrame:frame];
NSLog(@"%@ - %@", NSStringFromSelector(_cmd), NSStringFromCGRect(frame));
}

我还在 NSLog 语句上设置了一个断点,这样我就可以看到什么叫做 setFrame,我得到了一些我无法解释的奇怪结果,希望有人能阐明正在发生的事情以及原因。

加载 View 期间

1. initWithFrame calls: setFrame: - {{0, 0}, {320, 120}}
2. sizeToFit calls: setFrame: - {{0, 0}, {320, 109}}
3. setTableHeaderView calls: setFrame: - {{0, 0}, {320, 109}}
4. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {320, 109}}
5. _resizeWithOldSuperviewSize calls: setFrame: - {{0, 0}, {320, 65}}
6. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {320, 65}}
7. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {320, 65}}

向左旋转设备

1. _resizeWithOldSuperviewSize calls: setFrame: - {{0, 0}, {480, 0}}
2. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {480, 0}}
3. _resizeWithOldSuperviewSize calls: setFrame: - {{0, 0}, {480, 12}}
4. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {480, 12}}

向右旋转设备

1. _resizeWithOldSuperviewSize calls: setFrame: - {{0, 0}, {320, 172}}
2. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {320, 172}}
3. _resizeWithOldSuperviewSize calls: setFrame: - {{0, 0}, {320, 160}}
4. _adjustTableHeaderAndFooterViews calls: setFrame: - {{0, 0}, {320, 160}}

这解释了为什么我的 View 最初看起来被截断了,然后几乎消失了,最后最终与单元格重叠。看来 _resizeWithOldSuperviewSize 是罪魁祸首,我不明白为什么要调用它以及它从哪里获取这些奇数值。

我通过在 viewDidAppear:didRotateFromInterfaceOrientation: 中调用 [self.tableView.tableHeaderView sizeToFit] 来解决这个问题框架恢复到正确的大小但是重绘很糟糕,因为这两种情况都发生在 View 可见之后或旋转动画之后。尝试在 View 可见之前随时设置此设置会导致 _resizeWithOldSuperViewSize 将框架设置回这些奇怪的大小。

最佳答案

您需要获得正确的内在大小和 autoresizingMask。一旦你这样做了,UITableView 将停止与你的 tableHeaderView 搞砸。

例如,如果您希望页眉具有取决于其内容的固定高度,但又希望页眉使用整个表格宽度,您可以这样做:

1.使用以下自动调整掩码配置创建您的 View (因此表格不会尝试增加标题 View 高度):

enter image description here
2. 使用 AutoLayout 添加您的 subview ,使顶部/底部 anchor 与您的 View 匹配(这样您的 subview 就可以定义标题 View 的高度)
3. 像这样添加标题 View :

let headerView : CustomView? = CustomView.fromNib()
headerView?.sizeToFit()

tableView.tableHeaderView = headerView

关于iphone - UITableView 的 tableHeaderView 高度属性在加载和旋转期间更改为奇怪的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9248230/

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