Почему изменение фрейма UIScrollView меняет фреймы его подпредставлений? - PullRequest
3 голосов
/ 14 октября 2010

Это озадачивает меня.Я хочу изменить кадр UIScrollView при изменении ориентации:

if (orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight){

            self.myScrollView.frame = CGRectMake(40, 40, 984, 200);
            for (UIView* view in [self.myScrollView subviews]){
                NSLog(@"subview x: %f", view.frame.origin.x);
            }

        }
        else{

            self.myScrollView.frame = CGRectMake(40, 40, 728, 200);
            for (UIView* view in [self.myScrollView subviews]){
                NSLog(@"subview x portrait: %f", view.frame.origin.x);
            }
        }

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

    subview x: 0.000000
    subview x: 128.000000
    subview x: 256.000000
    subview x: 384.000000

    subview x portrait: -156.000000
    subview x portrait: -28.000000
    subview x portrait: 100.000000
    subview x portrait: 228.000000

Почему ??И как мне это предотвратить?

Ответы [ 2 ]

12 голосов
/ 14 октября 2010

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

0 голосов
/ 14 октября 2010

Может быть, установка этого чалда может помочь?

myScrollview.resizesSubviews = NO;

или если вы подклассифицируете uiscrollview, вы можете реализовать layoutSubviews, чтобы настроить макет для определенного размера кадра;)

...