Как программно изменить размер табличного представления пользовательского интерфейса? - PullRequest
0 голосов
/ 21 октября 2010

Я вложил в класс UITableViewController и назвал его FeaturedGamesViewController.Хорошо, у меня также есть контроллер навигации, к которому я добавил этот FeaturedGamesViewController в качестве корневого.Все довольно стандартные вещи, которые вы делаете в App Delegate.

Также обратите внимание, что для FeaturedGamesViewController не создано ни одного NIB-файла.Простое наследование UITableViewController и вызов initWithStyle устанавливает стиль таблицы и автоматически устанавливает dataSource, делегат и размер.Источник данных и делегат, очевидно, установлены в FeaturedGamesViewController.

- (id)init

{
// Вызвать назначенный инициализатор суперкласса [super initWithStyle: UITableViewStyleGrouped];

}

Хорошо, вы видите, что я установил размер таблицы "Сгруппированный".В альбомной ориентации на моем iPad он имеет около 20 пикселей пространства сверху, слева и справа (извините, я не могу опубликовать снимок экрана, потому что я здесь новичок, и система не позволит мне, пока я не наберу определенное количество баллов)

Я этого не хочу!Это альбом, поэтому я ожидаю, что он заполнит все пространство между панелью навигации и панелью вкладок ниже.Хуже всего то, что я подделал сетку с помощью пользовательского UITableViewCell, но пространство слева и справа сделало его таким, чтобы при щелчке по этому пространству выделялась вся строка, таким образом, выдавая ощущение, что это сетка.

Теперь я решил изменить размер табличного представления в viewDidLoad или что-то еще, но я не знаю как.Я не могу сделать initWithFrame из-за потенциальных утечек памяти (и, возможно, сброса уже установленных свойств dataSource, делегата и autoresizeMask), поэтому должен быть установщик или что-то, что сбрасывает источник представления таблицы прямо под панелью навигации и заполняет всеэкран размером 1024х748.Как вы динамически сбрасываете размер представления таблицы?

Тогда я очень расстроился и решил сделать это с помощью файла Nib. Таким образом, я могу установить ориентацию на альбомную и установить симулированную навигацию иПереместите вкладки и заполните оставшееся пространство табличным представлением.Это сработало!Если вам интересно, как создать табличное представление с пером после того, как вы создали подкласс UITableViewController БЕЗ кончика, вот как:

http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/CreateConfigureTableView/CreateConfigureTableView.html#//apple_ref/doc/uid/TP40007451-CH6-SW10

Перейдите к абзацу прямо перед «СозданиеТабличное представление программно ".

ОК, когда я это сделал, мой альбомный вид" сетки "выглядит заполняющим все пространство между панелью навигации вверху и панелью вкладок внизу, как я и хотел.

Я возился с этим еще немного, и я обнаружил, что в моей версии "non nib" (проблемной) я установил стиль таблицы как "сгруппированный".Когда я изменил его на "обычный", это сработало !!!Но вот в чем дело: в версии nib «сгруппированный» или «обычный» дает правильную компоновку с таблицей, занимающей все пространство.Итак, что дает?

Извините за длинный вопрос, но я думаю, что я спрашиваю:

1) Как программно сбросить размер табличного представления, не вызывая потенциальных утечек памяти и не влияядругие свойства, уже установленные для вас (например: dataSource, делегат, autoResizeMask - они установлены для вас только потому, что вы подклассифицировали UITableViewController)?

2) Как вы делаете это для любого представления в целом?

3) Почему «простой» стиль заполняет макет по желанию, тогда как «сгруппированный» стиль дает странный макет.Обратите внимание, что это не проблема в версии Nib.

Спасибо за ваше терпение!

1 Ответ

0 голосов
/ 21 октября 2010

Ответ для (2) и, следовательно, для (1):

Кадр UIView находится в локальной системе координат своего суперпредставления.Обычный способ сделать представление подходящим для его суперпредставления:

CGRect bounds = [[self superview] bounds];
[self setFrame:bounds];

Вы должны сделать это внутри layoutSubviews .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...