Как сделать подпредставление заполнить его суперпредставление - PullRequest
9 голосов
/ 19 июня 2011

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

Мой код прост. Дано 3 UIView, parent, from и to, удалить from from parent и добавить subview. + добавить анимацию, но это просто болваны.

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

Я даже добавляю To.frame = ParentView.frame; чтобы убедиться, что это работает. Это не так.

Что я должен был сделать?

+ (void) AnimateSwitchingWithParent: (UIView *) ParentView From: (UIView *) From To: (UIView* ) To
{
    /*[UIView beginAnimations:@"View Flip" context:nil];
    [UIView setAnimationDuration:1.25];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];


    [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromRight forView:ParentView cache:YES];*/
    [From removeFromSuperview];
    [ParentView addSubview:To];

    To.frame=ParentView.frame; //If I don't do this, the subview is still off by around 20 points
    NSLog(@"To.bounds: %@", NSStringFromCGRect(To.bounds));
    NSLog(@"From.bounds.: %@", NSStringFromCGRect(From.bounds));
    NSLog(@"ParentView.bounds: %@", NSStringFromCGRect(ParentView.bounds));


    //JA_DUMP (To.bounds);
    //JA_DUMP (To.bounds);



    /*[UIView commitAnimations];*/

}

Я нашел решение. Получается кадр То есть

К фреймам: {{0, 0}, {320, 372}}

Однако, если я удаляю To.frame = ParentView.frame, кадр также будет

{{0, 20}, {320, 460}}

Интересно, почему? 20 пунктов, кажется, расстояние от строки состояния. Где мы можем установить этот кадр в InterfaceBuilder?

Я установил в строке состояния значение «нет» в разделе SimulatedMetric.

Ответы [ 2 ]

20 голосов
/ 19 июня 2011

Кажется, вы неправильно понимаете рамки и границы, измените код на To.frame=ParentView.bounds; должно быть в порядке.

Похожие: Почему в UIView есть прямоугольник рамки и прямоугольник границ?

0 голосов
/ 03 марта 2015

Исправлена ​​разница «20 points» снизу в подвиде и в Swift:

To.frame = NSRect(origin: CGPoint(x: ParentView.bounds.origin.x, 
                                  y: ParentView.bounds.origin.y-20), 
                    size: ParentView.bounds.size)
...