我感觉自己像个白痴,因为我无法让这个工作起来,而且SO上的其他答案也没有给我任何帮助。
我有一个非常简单的UIView
,我在.xib文件中定义并将其加载为UITableViewController
的tableHeaderView
:
UIView* headerView = [[NSBundle mainBundle] loadNibNamed:@"ProfileHeaderView" owner:self options:nil][0];
self.tableView.tableHeaderView = headerView;
文件的所有者 .xib 的标题设置为我的控制器类,到目前为止这个工作正常。我的出口连接正确,我可以将标签设置为它们的正确值等等。
但是,当我在我的headerView中添加了一个UIButton时,无论我尝试什么都无法响应触摸。
我已经确认了头部和按钮的框架是正确的,并且都具有userInteractionEnabled设置为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>>
更新: 我发现了一些新的证据。上述内容记录在viewDidLoad
中,而且框架有它们正确的值。然而,如果我在tableView:didSelectRowAtIndexPath:
中设置断点,我注意到我的页眉视图框架高度不知何故已经改变为130像素!
po self.profileHeaderView
<UIView: 0x15eb6790; frame = (0 0; 320 130); autoresize = W+H; layer = <CALayer: 0x15eb67f0>>
我不知道是什么原因导致这个问题!当然,现在我知道了,如果我在viewDidAppear:
里明确将框架高度设置为194,它就可以正常工作。但是我显然想要修复导致框架首先发生变化的问题。
标题仍然可以正确绘制,并且在渲染时具有正确的高度(194像素),但由于某种原因,它的框架会在某个时候发生变化,这会导致按钮超出其框架而无法接收触摸。
是什么导致标题的框架发生这种变化?我根本没有设置任何约束。
po self.loginButton.superview
? - Burhanuddin Sunelwala