Как вы уменьшаете UIPickerView на iPhone? - PullRequest
23 голосов
/ 25 мая 2009

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

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

Как вы уменьшаете UIPickerView?

Ответы [ 5 ]

52 голосов
/ 25 мая 2009

На самом деле, вы можете немного уменьшить весь 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 приводит к нежелательным артефактам рисования.

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

3 голосов
/ 05 июня 2009

Это возможно и просто!

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

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

Вот и все!

1 голос
/ 31 июля 2015

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

  1. поместите вид сборщика в другое представление контейнера с нужным вам размером Place a pickerview into another container view

  2. проверить clipSubviews для просмотра контейнера

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

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

Результат: enter image description here

1 голос
/ 04 июня 2015

Создание простого UIView в Интерфейсном Разработчике. Установите желаемое положение и размер, добавьте ограничения. Установите флажок «Clip SubViews». Затем перетащите Picker View внутри этого представления в качестве подпредставления. Добавьте ограничения для выбора для выравнивания по горизонтали и вертикали внутри контейнера. Должен сделать работу.

1 голос
/ 25 мая 2009

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

а) 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];
}

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

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

...