Расположите UIView в середине UITableView с рамкой CGRectZero - PullRequest
3 голосов
/ 02 апреля 2010

У меня есть UITableViewController, который просматривает UITableView, который я выделяю / инициализирую с фреймом CGRectZero:

self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];

Я хочу добавить представление в середине tableView (представление загрузки с UIActivityIndicatorView и UILabel), но я не знаю, как его позиционировать, поскольку не знаю фрейма tableView.

x = (self.tableview.frame.size.width - loadingView.frame.size.width) / 2.0;
y = (self.tableview.frame.size.height - loadingView.frame.size.height) / 2.0;
[loadingView setCenter:CGPointMake(x, y)];

Я инициализировал свой tableView с фреймом CGRectZero, чтобы он мог занимать все место на экране (что он и сделал), но я думал, что его фрейм обновится или что-то в этом роде.

Есть идеи? Спасибо!

Ответы [ 3 ]

2 голосов
/ 02 апреля 2010

Мне удалось оценить, чтобы кадрировать программно. Я не упомянул, что мой tableView находится между навигационной панелью и панелью табуляции, поэтому вот код для этого случая:

CGFloat x = self.navigationController.view.frame.size.width;
CGFloat y = self.navigationController.view.frame.size.height -
            self.tabBarController.tabBar.frame.size.height;

self.tableView = [[UITableViewController alloc] initWithFrame:CGRectMake(0.0, 0.0, x, y)];

И приведенный выше код для позиционирования загрузки View работает как шарм!

Я открыт для более хороших решений, конечно

1 голос
/ 27 апреля 2010

Вы могли бы дать вашему LoadingView ссылку на вид, над которым он должен отображаться. Затем, когда он собирается показываться, он может проверить рамку представления, которое он представляет, чтобы отцентрировать и сопоставить это представление и добавить себя в качестве подпредставления суперпредставления TableView:

- (void)show
{
    self.center = targetView.center;
    [[targetView superview] addSubview:self];
}

Другой вариант заключается в том, чтобы LoadingView использовал KVO для мониторинга кадра UITableView и соответственно настраивал его собственный кадр.

0 голосов
/ 02 апреля 2010

Если ваш View Controller является UITableViewController, то кадр табличного представления совпадает с кадром UIViewController.

Почему бы вам не поместить его в центр обзора UIViewController?

Предполагая, что self является UITableViewController:

loadingView.center = self.view.center;
...