Как изменить высоту UIPickerView

Можно ли изменить высоту UIPickerView? Некоторые приложения, похоже, имеют более короткие PickerView, но установка меньшего кадра не работает, и кадр заблокирован в Interface Builder.

Ответ 1

Кажется очевидным, что Apple особенно не приглашает выкидыш с высотой по умолчанию UIPickerView, но я обнаружил, что вы можете добиться изменения в высоте представления, выполнив полный контролировать и передавать желаемый размер кадра во время создания, например:

smallerPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];

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

Ответ 2

Ни один из вышеперечисленных подходов не работает в iOS 4.0

Высота pickerView больше не переоценивается. Сообщение, которое сбрасывается на консоль, если вы попытаетесь изменить кадр сборщика в 4.0:

-[UIPickerView setFrame:]: invalid height value 66.0 pinned to 162.0 

В итоге я сделал что-то довольно радикальное, чтобы получить эффект более мелкого сборщика, который работает как в OS 3.xx, так и в OS 4.0. Я оставил сборщик в любом размере, который SDK решит, и должен сделать прозрачное прозрачное окно на моем фоновом изображении, через которое становится понятным. Затем просто расположите сборщик позади (Z Order wise) моего фона UIImageView, чтобы увидеть только часть сборщика, которая продиктована прозрачным окном на моем фоне.

Ответ 3

Для UIPickerView (162.0, 180.0 and 216.0) существует только три допустимые высоты.

Вы можете использовать функции CGAffineTransformMakeTranslation и CGAffineTransformMakeScale, чтобы правильно подобрать подборщик для вашего удобства.

Пример:

CGAffineTransform t0 = CGAffineTransformMakeTranslation (0, pickerview.bounds.size.height/2);
CGAffineTransform s0 = CGAffineTransformMakeScale       (1.0, 0.5);
CGAffineTransform t1 = CGAffineTransformMakeTranslation (0, -pickerview.bounds.size.height/2);
pickerview.transform = CGAffineTransformConcat          (t0, CGAffineTransformConcat(s0, t1));

Приведенный выше код изменит высоту представления сборщика на половину и переместите его в точную позицию (Left-x1, Top-y1).

Ответ 4

Try:

pickerview.transform = CGAffineTransformMakeScale(.5, 0.5);

Ответ 5

В iOS 4.2 и 4.3 следующие работы:

UIDatePicker *datePicker = [[UIDatePicker alloc] init];
datePicker.frame = CGRectMake(0, 0, 320, 180);
[self addSubview:datePicker];

Не работает следующее:

UIDatePicker *datePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 180)];
[self addSubview:datePicker];

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

Какая ошибка? Ваша догадка так же хороша, как моя.

Также есть 3 допустимые высоты для UIDatePickerUIPickerView) 162.0, 180.0 и 216.0. Если вы установите высоту UIPickerView на что-либо еще, вы увидите следующее на консоли при отладке на устройстве iOS.

2011-09-14 10:06:56.180 DebugHarness[1717:707] -[UIPickerView setFrame:]: invalid height value 300.0 pinned to 216.0

Ответ 6

Как и в iOS 9, вы можете свободно изменять ширину и высоту UIPickerView. Не нужно использовать вышеупомянутые манипуляции с ошибками.

Ответ 7

Я обнаружил, что вы можете редактировать размер UIPickerView - просто не с помощью построителя интерфейса. откройте файл .xib в текстовом редакторе и установите размер представления подборщика в нужное вам положение. Конструктор интерфейсов не имеет размера reset и, похоже, работает. Я уверен, что яблоко заблокировало размер по какой-то причине, поэтому вам придется экспериментировать с разными размерами, чтобы увидеть, что работает.

Ответ 8

Преимущества:

  • Делает setFrame UIPickerView вести себя так, как будто он должен
  • Нет кода преобразования внутри UIViewController
  • Работает в viewWillLayoutSubviews, чтобы перемасштабировать/позиционировать UIPickerView
  • Работает на iPad без UIPopover
  • Суперкласс всегда получает допустимую высоту
  • Работает с iOS 5

Недостатки:

  • Требуется подкласс UIPickerView
  • Требуется использовать pickerView viewForRow, чтобы отменить преобразование для subViews
  • UIAnimations могут не работать.

Решение:

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

#define FIXED_PICKER_HEIGHT 216.0f
- (void) setFrame:(CGRect)frame
{
    CGFloat targetHeight = frame.size.height;
    CGFloat scaleFactor = targetHeight / FIXED_PICKER_HEIGHT;
    frame.size.height = FIXED_PICKER_HEIGHT;//fake normal conditions for super
    self.transform = CGAffineTransformIdentity;//fake normal conditions for super
    [super setFrame:frame];
    frame.size.height = targetHeight;
    CGFloat dX=self.bounds.size.width/2, dY=self.bounds.size.height/2;
    self.transform = CGAffineTransformTranslate(CGAffineTransformScale(CGAffineTransformMakeTranslation(-dX, -dY), 1, scaleFactor), dX, dY);
}

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    //Your code goes here

    CGFloat inverseScaleFactor = FIXED_PICKER_HEIGHT/self.frame.size.height;
    CGAffineTransform scale = CGAffineTransformMakeScale(1, inverseScaleFactor);
    view.transform = scale;
    return view;
}

Ответ 9

Легкий способ изменить видимую высоту представления подборщика - это вставить сборщик в UIView, отрегулировать высоту родительского представления до высоты, которую вы хотите видеть в сборщике, а затем включить "Подвижные клипы" в Interface Builder на родительский UIView или установить view.clipsToBounds = true в код.

Clip Subviews in IB

Ответ 10

Я не смог следовать ни одному из приведенных выше советов.

Я просмотрел несколько руководств и нашел этот один из самых полезных:

Я добавил следующий код, чтобы установить новую высоту внутри метода viewDidLoad, который работал в моем приложении.

UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)]; 
[self.view addSubview:picker];
picker.delegate = self;
picker.dataSource = self;

Надеюсь, что это было полезно!

Ответ 11

Это сильно изменилось в iOS 9 (в iOS 8 он очень похож на то, что мы видим здесь). Если вы можете позволить себе ориентироваться только на iOS 9, то вы измените размер UIPickerView по своему усмотрению, установив его фрейм. Хорошо!

Вот от примечания к выпуску iOS 9

UIPickerView и UIDatePicker теперь изменяются по размеру и адаптивно-ранее, эти представления будут обеспечивать размер по умолчанию, даже если вы попытались изменить их размер. Эти представления теперь по умолчанию имеют ширину из 320 точек на всех устройствах, а не на ширину устройства на iPhone.

Интерфейсы, которые полагаются на прежнее применение размера по умолчанию, будут вероятно, выглядят неправильно при компиляции для iOS 9. Любые возникшие проблемы может быть разрешено путем полного ограничения или выбора размера желаемый размер вместо того, чтобы полагаться на неявное поведение.

Ответ 12

Я работаю с ios 7, Xcode 5. Я смог настроить высоту выбора даты косвенно, включив его в виде. Высота высоты контейнера может быть отрегулирована.

Ответ 13

Хорошо, после долгой борьбы с глупым выбором в iOS 4, я решил изменить свой контроль на простую таблицу: вот код:

ComboBoxView.m = which is actually looks more like pickerview.

//
//  ComboBoxView.m
//  iTrophy
//
//  Created by Gal Blank on 8/18/10.
//

#import "ComboBoxView.h"
#import "AwardsStruct.h"


@implementation ComboBoxView

@synthesize displayedObjects;

#pragma mark -
#pragma mark Initialization

/*
- (id)initWithStyle:(UITableViewStyle)style {
    // Override initWithStyle: if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
    if ((self = [super initWithStyle:style])) {
    }
    return self;
}
*/


#pragma mark -
#pragma mark View lifecycle

/*
- (void)viewDidLoad {
    [super viewDidLoad];

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}
*/

/*
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
}
*/
/*
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
}
*/
/*
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
}
*/
/*
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];
}
*/
/*
// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
*/


#pragma mark -
#pragma mark Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // Return the number of sections.
    return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // Return the number of rows in the section.
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
    return [[self displayedObjects] count];
}


// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {


    NSString *MyIdentifier = [NSString stringWithFormat:@"MyIdentifier %i", indexPath.row];

    UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
        //cell.contentView.frame = CGRectMake(0, 0, 230.0,16);
        UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 5, 230.0,19)] autorelease];
        VivatAwardsStruct *vType = [displayedObjects objectAtIndex:indexPath.row];
        NSString *section = [vType awardType]; 
        label.tag = 1;
        label.font = [UIFont systemFontOfSize:17.0];
        label.text = section;
        label.textAlignment = UITextAlignmentCenter;
        label.baselineAdjustment = UIBaselineAdjustmentAlignCenters;
        label.adjustsFontSizeToFitWidth=YES;
        label.textColor = [UIColor blackColor];
        //label.autoresizingMask = UIViewAutoresizingFlexibleHeight;
        [cell.contentView addSubview:label]; 
        //UIImage *image = nil;
        label.backgroundColor = [UIColor whiteColor];
        //image = [awards awardImage];
        //image = [image imageScaledToSize:CGSizeMake(32.0, 32.0)];

        //[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
        //UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        //cell.accessoryView = imageView;
        //[imageView release];
    }

    return cell;
}


/*
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the specified item to be editable.
    return YES;
}
*/


/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // Delete the row from the data source
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES];
    }   
    else if (editingStyle == UITableViewCellEditingStyleInsert) {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }   
}
*/


/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/


/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    // Return NO if you do not want the item to be re-orderable.
    return YES;
}
*/


#pragma mark -
#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Navigation logic may go here. Create and push another view controller.
    /*
     <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:detailViewController animated:YES];
     [detailViewController release];
     */
}


#pragma mark -
#pragma mark Memory management

- (void)didReceiveMemoryWarning {
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Relinquish ownership any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload {
    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
    // For example: self.myOutlet = nil;
}


- (void)dealloc {
    [super dealloc];
}


@end

Вот файл .h для этого:

//
//  ComboBoxView.h
//  iTrophy
//
//  Created by Gal Blank on 8/18/10.
//

#import <UIKit/UIKit.h>


@interface ComboBoxView : UITableViewController {
    NSMutableArray *displayedObjects;
}

@property (nonatomic, retain) NSMutableArray *displayedObjects;


@end

now, in the ViewController where I had Apple UIPickerView I replaced with my own ComboBox view and made it size what ever I wish.

ComboBoxView *mypickerholder = [[ComboBoxView alloc] init]; 
[mypickerholder.view setFrame:CGRectMake(50, 220, 230, 80)];
[mypickerholder setDisplayedObjects:awardTypesArray];

что теперь остается только создать переменную-член в представлении combobox, которая будет удерживать текущий выбор строки, и нам хорошо идти.

Наслаждайтесь всеми.

Ответ 14

Даже подумал, что это не изменение размера, другой трюк может помочь в ситуации, когда UIPicker расположен в нижней части экрана.

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

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

Ответ 15

Вы не можете вообще делать это в xib или настраивать фрейм программно, но если вы откроете родительский xib в качестве источника и измените высоту оттуда, то он будет работать. Щелкните правой кнопкой мыши на xib, в котором содержится pickerview, Search pickerview и вы можете найти высоту, ширину и т.д. в этом теге, измените высоту там, затем сохраните файл.

<pickerView contentMode="scaleToFill" id="pai-pm-hjZ">
                                    <rect key="frame" x="0.0" y="41" width="320" height="100"/>
                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
                                    <connections>
                                        <outlet property="dataSource" destination="-1" id="Mo2-zp-Sl4"/>
                                        <outlet property="delegate" destination="-1" id="nfW-lU-tsU"/>
                                    </connections>
                                </pickerView>

Ответ 16

Создайте представление в IB или коде. Добавьте свой сборщик в качестве подсмотра этого представления. Измените размер представления. Это проще всего сделать в IB. Создайте ограничения от представления до его супервизора и от сборщика до этого нового представления.

Поскольку кривые Picker вокруг него разливаются по верхней и нижней части представления. Вы можете видеть в IB, когда вы добавляете верхние и нижние ограничения от сборщика к представлению, он показывает стандартное пространство примерно на 16 пунктов выше и ниже контейнера супервизора. Установите для просмотра клип, если вы не хотите этого поведения (уродливое предупреждение).

Здесь он выглядит как 96 точек на iPhone 5. Сборщик с переливом составляет около 130 пунктов. Довольно тощий!

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

enter image description here

Здесь изображен вид, показывающий перелив.

enter image description here

Здесь ограничения IB, которые я добавил.

enter image description here

Ответ 17

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

Ответ 19

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

Ответ 20

Swift: вам нужно добавить подвью с клипом в рамки

    var DateView = UIView(frame: CGRectMake(0, 0, view.frame.width, 100))
    DateView.layer.borderWidth=1
    DateView.clipsToBounds = true

    var myDatepicker = UIDatePicker(frame:CGRectMake(0,-20,view.frame.width,162));
    DateView.addSubview(myDatepicker);
    self.view.addSubview(DateView)

В верхней части диспетчера представлений должно быть выделено 100 элементов выбора высоты.

Ответ 21

Мой трюк: используйте маску слоя datepicker, чтобы сделать datePicker видимой частью. как вы видите так же, как изменение фрейма datepicke.

- (void)timeSelect:(UIButton *)timeButton {
UIDatePicker *timePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 550)];
timePicker.backgroundColor = [UIColor whiteColor];
timePicker.layer.mask = [self maskLayerWithDatePicker:timePicker];
timePicker.layer.masksToBounds = YES;
timePicker.datePickerMode = UIDatePickerModeTime;
[self.view addSubview:timePicker];
}

- (CALayer *)maskLayerWithDatePicker:(UIDatePicker *)datePicker {
CAShapeLayer *shapeLayer = [[CAShapeLayer alloc] init];
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, datePicker.width*0.8, datePicker.height*0.8) cornerRadius:10];
shapeLayer.path = path.CGPath;
return shapeLayer;
}

Ответ 22

Я использую слой маски, чтобы изменить его размер отображения

// swift 3.x
let layer = CALayer()
layer.frame = CGRect(x: 0,y:0, width: displayWidth, height: displayHeight)
layer.backgroundColor = UIColor.red.cgColor
pickerView.layer.mask = layer

Ответ 23

Вставить в виде стека. Представление стека - это компонент, недавно добавленный Apple в свой iOS SDK, чтобы отразить реализации на основе сетки в библиотеках интерфейса пользователя java-скриптов, таких как начальная загрузка.

Ответ 24

Как уже упоминалось выше, размер UIPickerView теперь можно изменять. Я просто хочу добавить, что если вы хотите изменить высоту pickerView в ячейке tableView, у меня не получилось установить постоянную высоту привязки высоты. Однако использование lessThanOrEqualToConstant похоже, работает.

 class PickerViewCell: UITableViewCell {

    let pickerView = UIPickerView()

    func setup() {

        // call this from however you initialize your cell

        self.contentView.addSubview(self.pickerView)
        self.pickerView.translatesAutoresizingMaskIntoConstraints = false

        let constraints: [NSLayoutConstraint] = [
            // pin the pickerView to the contentView layoutMarginsGuide

            self.pickerView.leadingAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.leadingAnchor),
            self.pickerView.topAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.topAnchor),
            self.pickerView.trailingAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.trailingAnchor),
            self.pickerView.bottomAnchor.constraint(equalTo: self.contentView.layoutMarginsGuide.bottomAnchor),

            // set the height using lessThanOrEqualToConstant
            self.pickerView.heightAnchor.constraint(lessThanOrEqualToConstant: 100)
        ]

        NSLayoutConstraint.activate(constraints)
     }

 }

Ответ 25

stockPicker = [[UIPickerView alloc] init];
stockPicker.frame = CGRectMake(70.0,155, 180,100);

Если вы хотите установить размер UiPickerView. Над кодом, безусловно, будет работать для u.

Ответ 26

После долгого дня царапания моей головы я нашел то, что работает для меня. Приведенные ниже коды воссоздают UIDatePicker каждый раз, когда пользователь меняет ориентацию телефона. Это удалит все глюки, которые UIDatePicker имеет после изменения ориентации.

Поскольку мы воссоздаем UIDatePicker, нам нужна переменная экземпляра, которая сохранит выбранное значение даты. Коды ниже тестируются на iOS 4.0.

    @interface AdvanceDateViewController : UIViewController<UIPickerViewDelegate> {
        UIDatePicker *datePicker;
        NSDate *date;
    }


    @property (nonatomic, retain) UIDatePicker *datePicker;
    @property (nonatomic, retain) NSDate *date;

    -(void)resizeViewWithOrientation:(UIInterfaceOrientation) orientation;

    @end

    @implementation AdvanceDateViewController
    @synthesize datePicker, date;

    - (void)viewDidLoad {
      [super viewDidLoad];
          [self resizeViewWithOrientation:self.interfaceOrientation];
    }


    -(void)viewWillAppear:(BOOL)animated{
         [super viewWillAppear:animated];
         [self resizeViewWithOrientation:self.interfaceOrientation];
     }

     - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
         return YES;
     }

     -(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration{
      [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
      [self resizeViewWithOrientation:toInterfaceOrientation];
      }

     -(void)resizeViewWithOrientation:(UIInterfaceOrientation) orientation{
          [self.datePicker removeFromSuperview];
          [self.datePicker removeTarget:self action:@selector(refreshPickupDate) forControlEvents:UIControlEventValueChanged];
          self.datePicker = nil;

          //(Re)initialize the datepicker, thanks to Apple buggy UIDatePicker implementation
          UIDatePicker *dummyDatePicker = [[UIDatePicker alloc] init];
          self.datePicker = dummyDatePicker;
          [dummyDatePicker release];

          [self.datePicker setDate:self.date animated:YES];
          [self.datePicker addTarget:self action:@selector(refreshPickupDate) forControlEvents:UIControlEventValueChanged];

          if(UIInterfaceOrientationIsLandscape(orientation)){
                 self.datePicker.frame = CGRectMake(0, 118, 480, 162);    
           } else {
                 self.datePicker.frame = CGRectMake(0, 200, 320, 216);
           }

           [self.view addSubview:self.datePicker];
           [self.view setNeedsDisplay];
      }

      @end

Ответ 27

В iOS 5.0 я получил следующее:

UIDatePicker *picker = [[UIDatePicker alloc] init];
picker.frame = CGRectMake(0.0, 0.0, 320.0, 160.0);

Это создало выбор даты, как тот, который Apple использует в приложении "Календарь" при создании нового события в ландшафтном режиме. (3 строки выше, а не 5.) Это не сработало, когда я устанавливал кадр в методе initWithFrame:, но пока работает при настройке с помощью отдельного метода.

Ответ 28

для iOS 5:

если вы быстро просмотрите протокол UIPickerView Ссылка

вы найдете

– pickerView:rowHeightForComponent:
– pickerView:widthForComponent:

Я думаю, это первый, который вы ищете