好吧,我觉得自己像个白痴,我无法让这个工作正常进行,而且 SO 上的其他答案都没有让我得到任何帮助。
我有一个非常简单的UIView
我已经在 .xib 中定义并加载为tableHeaderView
of my UITableViewController
:
UIView* headerView = [[NSBundle mainBundle] loadNibNamed:@"ProfileHeaderView" owner:self options:nil][0];
self.tableView.tableHeaderView = headerView;
标头 .xib 的文件所有者设置为我的控制器类,到目前为止一切正常。我的插座连接正确,我可以将标签设置为正确的值等。
But,当我添加一个UIButton
对于我的 headerView,无论我尝试什么,它都不会响应触摸。
我已经确认标题和按钮的框架是正确的,并且都有userInteractionEnabled
as YES
.
我一生都无法弄清楚为什么这不起作用。我真的没有在这里做任何我能想到的棘手的事情。
这是一些调试信息:
po self.tableView.tableHeaderView
<UIView: 0x17ef5420; frame = (0 0; 320 194); autoresize = W+H; layer = <CALayer: 0x17eda4a0>>
po self.loginButton
<UIButton: 0x17ec1630; frame = (80 164; 160 30); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x17eec760>>
Update:我发现了一些新证据。以上内容均已记录在里面viewDidLoad
,并且框架有其正确的值。但是,如果我设置断点tableView:didSelectRowAtIndexPath:
,我注意到不知何故我的标题视图框架高度已更改为 130 px!
po self.profileHeaderView
<UIView: 0x15eb6790; frame = (0 0; 320 130); autoresize = W+H; layer = <CALayer: 0x15eb67f0>>
我不知道是什么原因造成的!当然现在我知道了这一点,如果我明确地将框架的高度设置回 194viewDidAppear:
效果很好。但我显然想首先解决任何改变我框架的问题。
标题仍然可以正确绘制,并且在渲染时具有正确的高度(194 px),但由于某种原因,其框架在某些时候发生了变化,这导致按钮落在其框架之外,因此无法接收触摸。
像这样改变标题的框架是什么?我根本没有对此设置任何限制。