Добавление UITableViewController в определенную позицию в его суперпредставлении - PullRequest
2 голосов
/ 04 февраля 2012

ОК, позвольте мне объяснить сценарий. Я занимаюсь разработкой приложения с фоновым изображением в главном окне. У меня также есть навигационный контроллер, который находится не в верхней части экрана, а на 100px вниз. Контроллер навигации полупрозрачный, поэтому вы можете видеть фон через него.

Теперь вот проблема. В какой-то момент в приложении пользователь нажимает кнопку, и у меня есть класс UITableViewController, который я добавляю в контроллер навигации с помощью pushViewController. Проблема заключается в том, что, хотя верхняя часть таблицы отображается непосредственно под навигационным контроллером, она помещает белый фон за навигационный контроллер, устраняя полупрозрачный эффект.

Я пробовал следующее: - Установите свойство frame моего представления tableviewcontroller, то есть.

tableviewcontroller1.view.frame= CGRectMake(0,120,320,300);

(Я играл с позицией у, но это не имеет значения, что бы я ни делал.)

Я подумал, что, возможно, мне удастся создать UIViewController и создать представление с прозрачным фоном, а затем добавить tableviewcontroller в качестве подпредставления, и при этом я надеялся, что границы фреймов, которые я установил в tableviewcontroller, вступят в силу. Я попробовал следующее:

[parentview.view addSubView: tableviewcontroller1]; // runtime error
[parentview.view addSubView: tableviewcontroller1.view]; // runtime error
[parentview.view addSubView: tableviewcontroller.tableView]; // runtime error

Я действительно изо всех сил пытаюсь понять, почему установка свойства frame моего tableviewcontroller.view не имеет никакого эффекта, я проверил все свои супер-представления, и ни у одного из них не установлено свойство "resize subviews".

Я был бы очень признателен за помощь в этом, я действительно застрял здесь, я много искал, но не могу найти ответ.

Большое спасибо Michael

1 Ответ

2 голосов
/ 04 февраля 2012

То, что вы называете навигационным контроллером, возможно, UINavigationBar. Контроллер навигации управляет различными контроллерами представления, панель навигации представляет собой интерфейс пользовательского интерфейса, принадлежащий контроллеру навигации.

Чтобы решить вашу проблему, просто дайте вашему табличному виду прозрачный фон.

// in NewTableViewController.m, viewDidLoad
self.tableView.backgroundColor = [UIColor clearColor];

Если по какой-то причине вам требуется представление, которое имеет некоторое пространство над и под контроллером табличного представления, вы должны создать контроллер представления и вставить табличное представление самостоятельно. Стандарт UITableViewController имеет табличное представление, установленное как основное view контроллеров, и, следовательно, не может быть изменено ...

  1. Создать подкласс UIViewController (не UITableViewController).
  2. Сделать контроллер соответствующим <UITableViewDelegate, UITableViewDatasource>
  3. Создайте @property с именем tableView.
  4. При инициализации установите self в качестве табличных представлений delegate и datasource.
  5. Создайте прозрачное представление соответствующего размера над таблицей. Это представление, а также представление таблицы являются подпредставлениями основного view вашего контроллера представления.
  6. Внедрить необходимые источники данных и методы делегата для табличного представления вручную.
...