设置UIControl的帧会更改视图边界,但不会更改接收触摸的位置

时间:2012-03-01 20:06:47

标签: iphone objective-c uiview uicontrol cgrect

我有一个headerView可以在按下时展开和折叠。它的默认状态已折叠。

我使用以下代码展开headerView

if (!self.headerViewIsExpanded) {
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
    [self.collapsedHeaderView removeFromSuperview];
    self.headerView.frame = self.expandedHeaderView.frame;
    [self.headerView addSubview:self.expandedHeaderView];

    self.tableView.frame = CGRectMake(self.tableView.frame.origin.x, self.tableView.frame.origin.y + offset, self.tableView.frame.size.width, self.tableView.frame.size.height - offset);

    [UIView commitAnimations];
    self.headerViewIsExpanded = YES;
}

它正确地扩展了视图框并减少了tableView框架。但是,它无法扩展原始UIControl的接收区域,因此我只能通过按原始帧的位置来折叠它。

如何解决此问题?

编辑:或者,我会接受一个答案,并解释为什么我无法解决问题,或者至少不能安全地解决问题。

编辑1:为了更清楚,headerView不是tableView标题视图。它只是一个位于表顶部的视图,恰好称为headerViewheaderViewtableView都是跨越可用窗口的主UIView的子视图。

1 个答案:

答案 0 :(得分:0)

您可以尝试重载 layoutSubviews 方法。在里面你应该使用setView的setFrame方法来定义所有视图元素的位置。