Установка фрейма UIControl меняет границы вида, но не там, где он может принимать прикосновения - PullRequest
1 голос
/ 02 марта 2012

У меня есть 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;
}

Правильно расширяет рамку вида и уменьшает рамку таблицы. Тем не менее, он не может расширить область, полученную касаниями исходного UIControl, поэтому я могу свернуть его только нажатием там, где была оригинальная рамка.

Как я могу решить эту проблему?

РЕДАКТИРОВАТЬ: В качестве альтернативы, я бы принял ответ с хорошим объяснением, почему я не могу решить проблему, или, по крайней мере, не решить ее безопасно.

РЕДАКТИРОВАТЬ 1: Для большей ясности, headerView НЕ является представлением tableView заголовка. Это просто вид сверху таблицы, который называется headerView. И headerView, и tableView являются подпредставлениями основного UIView, охватывающего доступное окно.

1 Ответ

0 голосов
/ 02 марта 2012

Вы можете попытаться перегрузить layoutSubviews метод.Внутри вы должны использовать метод setFrame для вашего headerView, чтобы определить положение всех элементов представления.

...