Как изменить размер текста и ширину компонента UIPickerView?

У меня есть следующий код для создания UIPickerView:

pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0f, 416.0f - height, 320.0f, height)];
pickerView.delegate = self;
pickerView.showsSelectionIndicator = YES;
[pickerView setSoundsEnabled:YES];

Я хотел бы изменить ширину компонентов и размер текста в каждом компоненте. Можно ли это сделать?

Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
16
0
23 173
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете изменить ширину с помощью соответствующего метода делегата

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
    switch(component) {
        case 0: return 22;
        case 1: return 44;
        case 2: return 88;
        default: return 22;
    }

    //NOT REACHED
    return 22;
}

Что касается настраиваемого размера текста, вы можете использовать делегата для возврата настраиваемых представлений с текстом любого размера, который вы хотите:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
        UILabel *retval = (id)view;
        if (!retval) {
            retval= [[[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)] autorelease];
        }

        retval.text = @"Demo";
        retval.font = [UIFont systemFontOfSize:22];
        return retval;
}

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

Пара ошибок во втором блоке кода: - UIView необходимо преобразовать в (UILabel *). - В строке назначения retval отсутствует открывающая скобка, и ей необходимо вызвать initWithFrame, иначе мы ничего не получим: т.е. retval = [[[UILabel alloc] initWithFrame: CGRectMake (0.0f, 0.0f, [pickerView rowSizeForComponent: component] .width, [pickerView rowSizeForComponent: component] .height)] autorelease];

Alan Rogers 16.03.2010 05:58

Спасибо, я внесу соответствующие изменения, хотя и не совсем то, что вы предлагаете. Я собираюсь использовать идентификатор, в основном потому, что он короче, и вы ничего не теряете, потому что lval выражения уже введено в UIView.

Louis Gerbarg 16.03.2010 11:52

Я также хочу добавить эту строку к ответу на случай, если вы работаете с массивом для заполнения средства выбора (скорее всего). Вместо retval.text = @ "Demo" замените на retval.text = [messageArray objectAtIndex: row];

Jazzmine 05.10.2012 18:45

Другие вопросы по теме