2009-02-11 2 views
9

Я пытаюсь разработать приложение с UIPicker в ландшафтном режиме, занимая (почти) всю ширину экрана (с 5 или 6 компонентами). Не могли бы вы рассказать мне, как установить размер UIPicker. Большое спасибо за Вашу помощь.Калибровка UIPicker в ландшафтном режиме

ответ

4

Вы не можете. Размер UIPickerView является постоянным.

UPDATE: Оказывается, вы можете изменить размер UIPickerView. Хитрость заключается в том, чтобы поместить его в другой (меньший) UIView и изменить размер этого вида. Я еще не пробовал.

ОБНОВЛЕНИЕ 2: Этот метод не изменяет размер UIPickerView, а обрабатывает его. Это может быть или не быть тем, что вы ищете, но AFAIK, нет никакого способа по-настоящему изменить размер UIPickerView, и это как можно ближе. Это не выглядит , что плохой.

ОБНОВЛЕНИЕ 3 (Долгосрочно): Начиная с SDK 3.0, UIPickerView полностью изменяет размер с использованием initWithFrame или setFrame.

0

Я уверен, что UIPicker имеет один размер, который вы не можете изменить. Было бы интересно услышать разные.

4

Вы можете отредактировать размер, открыв файл .xib в TextEdit и изменив размер UIPickerView.

9

На самом деле, я изменяю размеры своих сборщиков практически для каждого приложения. Мне не нравится, что они занимают весь экран. Вот метод, который я использую: (обратите внимание, что я также вращающаяся сборщика быть горизонтальным)

в viewDidLoad .....

picker = [[UIPickerView alloc] initWithFrame:CGRectZero]; 
picker.delegate = self; 
picker.dataSource = self; 
picker.showsSelectionIndicator = NO; 


//Resize the picker, rotate it so that it is horizontal and set its position 
CGAffineTransform rotate = CGAffineTransformMakeRotation(-1.57); 
rotate = CGAffineTransformScale(rotate, .46, 2.25); 
CGAffineTransform t0 = CGAffineTransformMakeTranslation(3, 22.5); 
picker.transform = CGAffineTransformConcat(rotate,t0); 
[self.view addSubview:picker]; 
[picker release]; 

Затем я хотел бы добавить фоновое изображение для мой взгляд, покрывает серые полосы (которые в настоящее время на верхней и нижней) UIPicker:

//Create the overlay to superimpose ontop of the picker 
//In this case, the image is the size of the screen with a transparent area the size of the //UIPickerView cut out in the middle 

UIImageView *uiiv = [[UIImageView alloc] 
        initWithImage:[UIImage         imageNamed:@"problem_bg.png"]]; 
uiiv.userInteractionEnabled = NO; 
uiiv.opaque = YES; //for performance 
[self.view addSubview:uiiv]; 
[uiiv release]; 

UIPickerView метод делегата:

-(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)rowforComponent:(NSInteger)component reusingView:(UIView *)view 
{ 

    UIView *viewForRow = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 280)] autorelease]; 
    UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myimage.png"]]; 

    img.frame = CGRectMake(0, 0, 102,280); 
    img.opaque = YES; 
    [viewForRow addSubview:img]; 
    [img release]; 
    UILabel *label; 

    UIFont *font = [ UIFont fontWithName:@"Helvetica" size:20]; 

    label = [[[UILabel alloc] initWithFrame:CGRectMake(10, 20, 270, 100)] autorelease]; 

    label.text = @"I am a label"; 
    label.textAlignment = UITextAlignmentCenter; 
    label.textColor = [UIColor blackColor]; 
    label.font = font; 
    label.backgroundColor = [UIColor clearColor]; 
    label.opaque = NO; 
     [viewForRow addSubview:label]; 

    CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57); 
     [viewForRow setTransform:rotate]; 
    return viewForRow; 

} 

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

+0

Это помогло мне, спасибо миллион – qui

0

Нет проблем (я только что зарегистрировался). Кстати, я просто понял, что когда я отправил свой ответ, метод (UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent .... потерял пространство между строкой и forComponent. Поэтому убедитесь, что у вас есть делегат правильно, иначе он не будет работать.

0

Ответ на:

-(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { 

Поскольку с:

- (NSString*)pickerView:(UIPickerView*)pv titleForRow:(NSInteger)row forComponent:(NSInteger)component 

Делает работу (то есть: вбок масштабируемого наклейке) конечно

1

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

  1. Забудьте об интерфейсе!Я думаю, что вы можете намного улучшить интерфейс без интерфейса.
  2. В ваших контроллерах перезапись метода просмотра нагрузки.

    -(void)loadView 
    { 
         //create your view 
    self.view = [[UIView alloc] initWithFrame:CGRectZero]; 
    // create a default sized pickerView 
    pickerView = [[UIPickerView alloc] initWithFrame:CGRectZero]; 
    pickerView.delegate = self; 
    pickerView.dataSource = self; 
    pickerView.showsSelectionIndicator = YES; 
    
        // Get its frame 
    CGRect pickerFrame = pickerView.frame; 
    
        // Set it to what ever you like, I use a default screen height times a shrink factor like 0.75 for 3/4 of its original size 
    pickerFrame.size.width = screenWidth*pickerShrinkFactor; 
    pickerFrame.size.height = pickerHeight*pickerShrinkFactor; 
    // You can also set the upper left corner of the picker 
    pickerFrame.origin.x = 0; 
    // Set the picker frame to new size and origin 
         pickerView.frame = pickerFrame; 
         // Add it to your view 
    [self.view addSubview:pickerView]; 
    
    } 
    

Успехов