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

Это код инициализации для TutorialPage.m, подкласса UIView:

- (id)initWithFrame:(CGRect)frame andPage:(int) page
{
self = [super initWithFrame:frame];
if (self) {
     NSLog(@"tutorial page %d initialized", page);
    switch (page) {
        case 0:
            self.view = [[[NSBundle mainBundle] loadNibNamed:@"TutorialPage01View" owner:self options:nil] objectAtIndex:0];
            break;
        case 1:
            self.view = [[[NSBundle mainBundle] loadNibNamed:@"TutorialPage02View" owner:self options:nil] objectAtIndex:0];
            break;
        default:
            break;
    }

    NSLog(@"frame %g %g, %g %g", frame.origin.x, frame.origin.y, frame.size.width, frame.size.height);

    [self addSubview:self.view];

}



return self;
}

Страницы добавляются в scrollview следующим образом: приведенный ниже код является частью TutorialViewController.m, у которого есть допустимый выход scrollview:

- (void)viewDidLayoutSubviews
{

NSLog(@"tutorial view loaded");

self.scrollView.scrollEnabled = YES;
self.scrollView.pagingEnabled = YES;
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * 2, self.scrollView.frame.size.height);

for (int i = 0 ; i < 2 ; i++) {

    CGRect frame;
    frame.origin.x = self.scrollView.frame.size.width * i;
    frame.origin.y = 0;
    frame.size = self.scrollView.frame.size;

    UIView *subview = [[TutorialPage01 alloc] initWithFrame:frame andPage:i];

    [self.scrollView addSubview:subview];

}

}

Макеты разделены на две половины по вертикали. И каждая половина имеет ограничения, чтобы она соответствовала виду контейнера и имела одинаковую высоту.

ПРОБЛЕМА

Когда представления добавляются к просмотру прокрутки, они как бы игнорируют автоматическое размещение, а вложенное представление, которое должно иметь размер (290, 538), представляется как (320,568), поэтому оно вторгается на другие страницы.

Можно ли добавить ограничения в файл .xib, а затем применить их к добавляемому супервизору в коде?

Заранее спасибо!

1
Felipe Jun 19 Авг 2014 в 21:10

1 ответ

Лучший ответ

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

- (id)initWithFrame:(CGRect)frame andPage:(int) page
{
    self = [super initWithFrame:frame];
    if (self) {
        UIView *view = [[[NSBundle mainBundle] loadNibNamed:@"TutorialView" owner:self options:nil] objectAtIndex:0];
        view.frame = self.frame;
        [self addSubview:view];
    }
    return self;
}

Мне показалось, что это сработало в гораздо более простом приложении, которое я построил на основе вашего кода.

3
mitrenegade 19 Авг 2014 в 22:47