Определение размера UIPicker в ландшафтном режиме
Я пытаюсь разработать приложение с UIPicker в ландшафтном режиме, занимая (почти) всю ширину экрана (с 5 или 6 компонентами). Подскажите, пожалуйста, как установить размер UIPicker. Большое спасибо за Вашу помощь.
7 ответов
На самом деле, я изменяю размеры своих сборщиков почти для каждого приложения. Мне не нравится, что они занимают весь экран. Вот метод, который я использую: (обратите внимание, что я также поворачиваю сборщик, чтобы он был горизонтальным)
в 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;
}
Это дает намного меньший, горизонтальный сборщик с хорошим взглядом и чувством. Я надеюсь, что это помогает кому-то.
Ты не можешь Размер UIPickerView постоянен.
ОБНОВЛЕНИЕ: Оказывается, вы можете изменить размер UIPickerView. Хитрость заключается в том, чтобы поместить его в другой (меньший) UIView и изменить его размер. Я еще не пробовал это.
ОБНОВЛЕНИЕ 2: Этот метод не изменяет размер UIPickerView, а скорее обрезает его. Это может или не может быть то, что вы ищете, но AFAIK, нет способа действительно изменить размер UIPickerView, и это настолько близко, насколько это возможно. Это не выглядит так плохо.
ОБНОВЛЕНИЕ 3 (давно просрочено): Начиная с SDK 3.0, UIPickerView полностью изменяет размеры с помощью initWithFrame или setFrame.
Вы можете изменить размер, открыв файл.xib в TextEdit и изменив размер UIPickerView.
Я боролся с той же проблемой изменения размера выбора. После некоторых исследований и головной боли вот что вы можете легко сделать:
- Забудьте Интерфейсный строитель! Я думаю, что вы можете намного лучше UI без конструктора интерфейса.
В ваших контроллерах перезаписать метод просмотра нагрузки.
-(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]; }
Удачи
Нет проблем (я только что зарегистрировался). Кстати, я только что понял, что, когда я разместил свой ответ, что метод (UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent ....
потерял пространство между строкой и forComponent. Поэтому убедитесь, что у вас есть правильный делегат, иначе он не будет работать.
Я совершенно уверен, что UIPicker имеет один размер, который вы не можете изменить. Было бы интересно услышать разные.
Ответ в:
-(UIView *) pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
Так как с:
- (NSString*)pickerView:(UIPickerView*)pv titleForRow:(NSInteger)row forComponent:(NSInteger)component
Заставляет это работать (то есть: сбоку с масштабируемой этикеткой), конечно