UIPickerView занимает все горизонтальное пространство на iPhone, но не на iPad? - PullRequest
0 голосов
/ 26 ноября 2010

Я заметил кое-что, что никогда не было проблемой раньше.Я сделал проект для iPad, где я использовал несколько UIPickerView, расположенных рядом друг с другом по горизонтали.Здесь они уважают рамку CGRect, с которой я их инициализирую, то есть размещение других элементов по обе стороны от них не составило проблем.

Теперь я пытаюсь сделать это в проекте iPhone, и здесь UIPickerView настаиваетбыть единственным элементом.Он сам изменяет размеры, чтобы заполнить экран горизонтально, с «круглой» графикой.

Я пробовал разные подходы, поместите UIPickerView в другое представление, затем измените размер этого супер представления, которое просто приводит к отсечению, а неизменение размера.Другое дело, что UIPicker требует размещения в центре экрана.По сути, это означает, что при добавлении UIPickerView на экран, даже если его один компонент имеет ширину всего 70 пикселей, эти 320 пикселей экрана используются.

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

Я пропускаю что-то очевидное здесь?Надеюсь, кто-то может протянуть руку, спасибо заранее:)

Ничего более сложного, чем это:

UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 250.0f, 165.0f)];

UIPickerView *picker = [[UIPickerView alloc] initWithFrame:container.frame];
[picker setDelegate:self];
[picker setDataSource:self];
[container addSubview:picker];

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

1 Ответ

1 голос
/ 27 ноября 2010

Я попробовал ваш код с тем же результатом.

Однако вы можете установить фрейм после того, как сборщик будет создан и добавлен в ваш контейнер, и новый размер будет соблюден. Вот мой тестовый пример, который работает для меня с использованием SDK 4.2 в симуляторе iPhone:

- (void)viewDidLoad {
    [super viewDidLoad];

    UIPickerView* pv = [[[UIPickerView alloc] initWithFrame: CGRectMake(160, 100, 100, 216) ] autorelease];
    pv.delegate = self;
    pv.dataSource = self;
    [self.view addSubview: pv];

    pv.frame = CGRectMake(10, 10, 100, 216);
}
...