2013-07-09 2 views
0

Я пытаюсь программно сделать два представления общей ширины родительского представления. Я попытался использовать init для subviews и initWithFrame, но в любом случае я не могу заставить растягивание работать правильно. В приведенном ниже примере я ожидаю увидеть красное окно, охватывающее половину ширины экрана, и зеленое окно, заполняющее вторую половину. Что мне не хватает?iOS: Как вы создаете два автозаполнения UIViews?

self.view = [[UIView alloc] initWithFrame:self.window.frame]; 
self.left = [[UIView alloc] init]; 
self.right = [[UIView alloc] init]; 

[self.left setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight)]; 
[self.right setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight)]; 

[self.view setBackgroundColor:[UIColor blueColor]]; 
[self.left setBackgroundColor:[UIColor redColor]]; 
[self.right setBackgroundColor:[UIColor greenColor]]; 

[self.left setContentMode:UIViewContentModeScaleToFill]; 
[self.right setContentMode:UIViewContentModeScaleToFill]; 


[self.view addSubview:self.left]; 
[self.view addSubview:self.right]; 
[self.view setAutoresizesSubviews:YES]; 

[self.window addSubview:self.view]; 

Спасибо!

+0

Что вы видите при запуске этого кода? – Putz1103

+0

Где этот код существует? 'ViewDidLoad'? 'ViewWillAppear'? Где-нибудь еще? – Axeva

+0

У меня разные версии этого кода, где я вижу ничего, кроме синего фона, и если я устанавливаю рамку для разбора слева и справа], я получаю квадраты (красный и зеленый), которые я устанавливал в рамке поверх синего фона, но нет растяжения. – user2565728

ответ

1

Вы никогда не устанавливаете исходный кадр из 2 видов.

Этот код протестирован и работает в UIViewController

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    CGRect fullFrame = self.view.frame; 

    // position left view 
    CGRect leftFrame = fullFrame; 
    leftFrame.size.width = leftFrame.size.width/2; 
    self.left = [[UIView alloc] initWithFrame:leftFrame]; 

    // position right view 
    CGRect rightFrame = leftFrame; 
    rightFrame.origin.x = rightFrame.size.width; 
    self.right = [[UIView alloc] initWithFrame:rightFrame]; 

    [self.left setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight)]; 
    [self.right setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleHeight)]; 

    [self.view setBackgroundColor:[UIColor blueColor]]; 
    [self.left setBackgroundColor:[UIColor redColor]]; 
    [self.right setBackgroundColor:[UIColor greenColor]]; 

    [self.left setContentMode:UIViewContentModeScaleToFill]; 
    [self.right setContentMode:UIViewContentModeScaleToFill]; 


    [self.view addSubview:self.left]; 
    [self.view addSubview:self.right]; 
    [self.view setAutoresizesSubviews:YES]; 
} 
+0

И если родительский вид (self.view, например) будет изменен позже, будут ли дети автоматически изменяться? – user2565728

+0

Да, они будут изменены. – Dima

0

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

self.left.frame = CGRectMake(0, 0, self.window.frame.size.width/2, self.window.frame.size.height); 
self.right.frame = CGRectMake(self.window.frame.size.width/2, 0 , self.window.frame.size.width/2, self.window.frame.size.height); 
Смежные вопросы