Как вы сокращаете UIPickerView на iPhone?

Я хотел бы уменьшить высоту UIPickerView в моем приложении iPhone, чтобы он показывал только одну строку и один столбец. Высота представления сборщика должна быть равна высоте строки.

Я использую Interface Builder для построения UIPickerView, но я не могу найти простой способ изменить размер этого элемента управления.

Как вы сокращаете UIPickerView?

Ответ 1

Собственно, вы можете слегка сжать весь UIPickerView, применив аффинное преобразование к закрывающему виду. Например:

CGSize pickerSize = [pickerView sizeThatFits:CGSizeZero];

pickerTransformView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, pickerSize.width, pickerSize.height)];
pickerTransformView.transform = CGAffineTransformMakeScale(0.75f, 0.75f);

[pickerTransformView addSubview:pickerView];
[self.view addSubview:pickerTransformView];
[pickerTransformView release];

будет масштабировать сборщик до 75% от его первоначального размера, помещая его в пределах содержащего представления и применяя преобразование масштабирования к этому представлению. Применение преобразования непосредственно к UIPickerView приводит к нежелательным рисункам артефактов.

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

Ответ 2

Это возможно и легко!

Просто откройте файл nib как обычный текст, затем найдите представление выбора и настройте меры:

<object class="IBUIPickerView" id="783900772">
<reference key="NSNextResponder" ref="191373211"/>
<int key="NSvFlags">292</int>
<string key="NSFrame">{{85, 68}, {150, 116}}</string>

Что все!

Ответ 3

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

a) UITableView + UIPickerView
Я рекомендую вам использовать "строку в UITableView + UIPickerView" для этого. Вы можете использовать строку в tableView, как dropDownList в Windows, когда вы нажимаете на эту строку, будет отображаться pickerView (сначала скрытый).

б) Если у вас есть длинный список данных в tableView, и только один из элементов должен выбрать данные, вы должны прокрутить представление, используя следующий метод (не забудьте вычислить исходное положение pickerView, поскольку оно будет перемещено вверх/вниз вместе)


-(void)setViewMove:(BOOL)moveUP offset:(CGFloat)offset
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    CGRect rect = self.view.frame;

    if(moveUP)
    {
        rect.origin.y-=offset;
        rect.size.height+=offset;
    }
    else    //move down
    {
        rect.origin.y+=offset;
        rect.size.height-=offset;
    }
    self.view.frame = rect;
    [UIView commitAnimations];
}

с) Вы также можете добавить другое представление для сборщика и вернуться к этому представлению, когда вы что-то выбрали.

Мой вывод:
Если в таблицеView есть только несколько строк, используйте.
Если у вас много строк в tableView, но только один из них нуждается в сборщике, используйте b.
Если у вас много строк в tableView, и многие из них нуждаются в сборщике, используйте c.

Ответ 4

Создайте простой UIView в Interface Builder. Установите желаемую позицию и размер, добавьте ограничения. Установите флажок "Захватить подвид". Затем перетащите и выберите Picker View внутри этого представления в качестве подзаголовка. Добавьте ограничения для выбора для выравнивания по горизонтали и вертикали внутри контейнера. Должен выполнять эту работу.

Ответ 5

Ответ пользователя2248258 действительно работает, если вы используете раскадровки и/или автозапуск. Там я хотел бы добавить скриншоты, как предложил Ниламбар.

  • поместите pickerview в другой вид контейнера с размером, который вы хотите Поместить pickerview в другой вид контейнера

  • check clipSubviews для представления контейнера

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

Таким образом, представление сборщика обрезается до нужного размера (не будет изменяться).

Результат: введите описание изображения здесь