Objective-C объект размещения iPad - PullRequest
0 голосов
/ 03 июня 2011

У меня есть класс GUI, расширяющий UIViewController.

В его функции viewDidLoad я хотел бы иметь экземпляр UITextField.Мне бы хотелось, чтобы этот экземпляр не выравнивался как простой CGRect, устанавливая его смещение, ширину и высоту, но я бы хотел, чтобы его размер был динамически изменен, чтобы он занимал всю ширину экрана со смещением в 5px от верхнего, левого иПраво каждого и высота 20 пикселей.Как это сделать?

Он должен поддерживать «относительно абсолютное» позиционирование независимо от ориентации устройства, при этом поддерживаются все ориентации.

Может быть, есть что-то вроде LayoutManager, как, например,GridBagLayout на Java?

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 03 июня 2011

Вы хотите установить свойство autoresizingMask представления.

UIView *theParentView; // Assume this is the root view that owns the whole screen

CGRect textFieldFrame = CGRectMake(5, // Top-left corner x position
                                   5, // Top-left corner y position
                                   [theParentView bounds].width - 10, // Width
                                   20); // Height

UIView *myView = [[UIView alloc] initWithFrame:textFieldFrame];

// This will make it resize with the parent view, maintaining margins
[myView setAutoresizingMask:UIViewAutoresizingFlexibleWidth];

[theParentView addSubview:myView];

[myView release];

Это можно сделать и из Interface Builder.В Интерфейсном Разработчике даже есть небольшая анимация, показывающая, как будет изменяться размер представления.

1 голос
/ 03 июня 2011

Помните, что сам UIViewController не отображается, но он управляет иерархией объектов вида.Вы можете создать текстовое поле в -viewDidLoad, но его нужно добавить в представление контроллера представления, прежде чем вы сможете его увидеть.Вы бы сделали что-то вроде этого:

CGFloat inset = 5.0;
CGFloat fieldHeight = 20.0;
CGRect fieldRect = CGRectMake(inset,
                              inset,
                              self.view.size.width - (2 * inset),
                              fieldHeight);
UITextField *field = [[UITextField alloc] initWithFrame:fieldRect];
field.autoResizingMask = UIViewAutoresizingFlexibleWidth;
[self.view addSubview:field];
[field release];

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

0 голосов
/ 03 июня 2011

Ничто как таковое не встроено в ОС.Я видел пару версий чего-то вроде того, что вы спрашиваете, включая мою собственную, которая работает на GitHub

...