Размер UIPickerView установлен неправильно - PullRequest
2 голосов
/ 13 июня 2011

Мне нужно показать вид, который не является полноэкранным, и под ним есть кнопка и окно выбора. Я пытался использовать этот код:

UIView *container = [[UIView alloc] initWithFrame:CGRectMake(20,20,200,200)];
        container.backgroundColor=[UIColor whiteColor];

        UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        myButton.frame = CGRectMake(container.frame.origin.x, container.frame.origin.y+5, 170, 20); // position in the parent view and set the size of the button
        myButton.titleLabel.textColor=[UIColor redColor];
        myButton.titleLabel.text=@"click me";
        //myButton.backgroundColor=[UIColor blueColor];
        //[myButton backgroundImageForState:<#(UIControlState)#>[UIImage imageNamed:@"iPhone_mainbutton_green.png"];
        // add targets and actions
        [myButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
        // add a buttonview
        [container addSubview:myButton];

        UIPickerView *piker=[[UIPickerView alloc] initWithFrame:CGRectMake(container.frame.origin.x, container.frame.origin.y +30, 100, 100)];
        //piker.numberOfComponents=1;
        piker.showsSelectionIndicator=YES;
        //piker.delegate=self;
        //piker.dataSource=self;

        [container addSubview:piker];

        [myButton release];
        [piker release];

        [self.view addSubview:container];

и я получаю это (сборщик с экрана и очень большой, не 100x100):

enter image description here

Ответы [ 3 ]

2 голосов
/ 02 июня 2012

Вы добавляете свой UIPickerView в качестве подпредставления «контейнера»

UIPickerView *piker=[[UIPickerView alloc] initWithFrame:CGRectMake(container.frame.origin.x, container.frame.origin.y +30, 100, 100)];

это означает, что представление выбора происходит из контейнера, а не из UIView, если вы хотите, чтобы оно находилось в правильной позиции:1005 *

просто сосредоточьтесь на своем происхождении и помните, что каждое подпредставление берет свое происхождение от своего родительского представления.и еще одна вещь, яблоко не позволяет изменять высоту окна выбора, поэтому вы не можете установить его 100x100, вы можете просто изменить его ширину.UIPickerView поддерживает только 3 значения высоты, а это 216.0, 180.0, 162.0, которые пытаются установить высоту только из этих 3 значений.это будет работать.

сообщите мне, если у вас есть какие-либо вопросы по этому поводу.

2 голосов
/ 13 июня 2011

вы добавляете свой вид сборщика в контейнере, а кадр контейнера :-( 20,20,200,200)

сделать его (0,20,200,200).

0 голосов
/ 11 октября 2011

Если вы хотите настроить кадр, сделайте это в методе viewWillAppear: вашего контроллера представления - вы можете настроить его там.

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

- (void)viewDidLoad{
    self.picker = [[[UIPickerView alloc] init] autorelease];
    [self.view addSubview:self.picker];  
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.settingsPicker.frame =  CGRectMake(0.0, 100.0, self.view.frame.size.width, 100.0);
}

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
    CGFloat guessedPickerInsetWidth = 24;
    CGFloat pickerWidth = self.view.frame.size.width - guessedPickerInsetWidth;
    if (component == SettingsPickerFirstComponent) {
        return pickerWidth * 0.4; // make the first component 40%
    }
    return pickerWidth * 0.3; // only two others, make them 30% each
}
...