1

我已经在控制器上工作了 4 天,但我无法解决我的问题!

让我们来解释一下我的架构:

我有一个“Rootview”,其中包含一个 ScrollView 和 anImageView(它们都添加到 IB 中)

然后我有 4 个外部视图控制器。

我想要的是:将我的 4 个视图控制器放在我的滚动视图中(这工作正常,两个视图都添加到我的滚动视图中的代码中)并允许用户在视图之间滚动

当我滚动时,我有一个小动画将我的视图缩放到 50%,然后将它们重新缩放到 100%。

当我在 IB 中禁用“自动布局”时,一切都很好!我的动画和我的观点的位置。但是,我不能禁用它,因为我希望我的应用程序可以在 iPhone4 和 iPhone5 上运行。

我不知道如何实现我的约束以正确定位我的所有视图。我只是希望我的视图高度调整为 50 像素以适合 iPhone 4 屏幕。

这是我的 scrollViewConfiguration

- (void)configureScrollView{
/* On déclare le nombre de page la scrollview */
if (self.myCurrentEvent.isEvent)
{
    self.numberOfScrollViewPages = 2;
}
else
{
    self.numberOfScrollViewPages = 4;
}

/* On initialise le tableau qui va contenir les tableviews */
viewControllersArray = [[NSMutableArray alloc] init];

/* Tant qu'on a pas atteint le nombre de pages de la scrollview */
for (unsigned i = 0; i < self.numberOfScrollViewPages; i++)
{
    /* On ajoute NSNull au tableau de tableview */
    [self.viewControllersArray addObject:[NSNull null]];
}

[self.myScrollView setTranslatesAutoresizingMaskIntoConstraints:NO];

/* On configure la content size en prenant la taille de la scroll view x le nombre de pages */
self.myScrollView.contentSize = CGSizeMake(self.myScrollView.frame.size.width * self.numberOfScrollViewPages, self.myScrollView.frame.size.height);

/* On désactive l'affichage du scroll horizontal */
self.myScrollView.showsHorizontalScrollIndicator = NO;

/* On désactive l'affichage du scroll vertical */
self.myScrollView.showsVerticalScrollIndicator = NO;

/* On désactive la fonction scroll to top */
self.myScrollView.scrollsToTop = NO;

/* On indique implémenter les fonction du son delegate */
self.myScrollView.delegate = self;

/* On affiche la première page */
[self loadScrollViewWithPage:0];

/* On affiche la deuxième page */
[self loadScrollViewWithPage:1];

if (!self.myCurrentEvent.isEvent)
{
    [self loadScrollViewWithPage:2];
    [self loadScrollViewWithPage:3];
}}

- (void)loadScrollViewWithPage:(int)page{
/* Si la page passée en paramètre est inférieure à 0, on sort de la fonction */
if (page < 0) return;

/* Si la page passée en paramètre est supérieur au nombre de page de la scrollview */
if (page >= self.numberOfScrollViewPages) return;

/* On récupère la référence vers la view contenu dans le tableau des tableview */
UIViewController *aViewController = [self.viewControllersArray objectAtIndex:page];

/* Si la vue récupérée est nulle */
if ((NSNull *)aViewController == [NSNull null])
{
    switch (page)
    {
        case 0:
            [self configureEventDescriptionViewController];
            [self.viewControllersArray replaceObjectAtIndex:page withObject:self.myEventDescriptionViewController];
            aViewController = self.myEventDescriptionViewController;
            break;

        case 1:
            [self configureListOfContactViewController];
            [self.viewControllersArray replaceObjectAtIndex:page withObject:self.myListOfContactViewController];
            aViewController = self.myListOfContactViewController;
            break;

        case 2:
            [self configureListOfExpensesCategoryViewController];
            [self.viewControllersArray replaceObjectAtIndex:page withObject:self.myListOfExpensesCategoryViewController];
            aViewController = self.myListOfExpensesCategoryViewController;
            break;

        case 3:
            [self configureLinkContactViewController];
            [self.viewControllersArray replaceObjectAtIndex:page withObject:self.myLinkContactViewController];
            aViewController = self.myLinkContactViewController;
        default:
            break;
    }
}

/* Si la superview de la vue est à nil */
if (aViewController.view.superview == nil)
{
    [aViewController.view setTranslatesAutoresizingMaskIntoConstraints:NO];

    CGRect frame;
    frame.size.height = self.myScrollView.frame.size.height;
    frame.size.width = 320;
    frame.origin.x = page * 320;
    frame.origin.y = 0;

    [aViewController.view setFrame:frame];

    /* On ajoute la vue courante à la scrollview */
    [self.myScrollView addSubview:aViewController.view];
}

aViewController = nil;}

我设置 viewController 框架的部分只有在我禁用自动布局时才有效

我希望你明白我想说什么...

对不起,我的英语不好...

普威尔

4

1 回答 1

0

不是最好的解决方案,但您可以有两个故事板,一个用于 4,一个用于 5。在应用程序委托中询问设备屏幕大小并加载适当的故事板。

同样,它不是最好的解决方案,但您也可以使用 .xib 使其工作。我不得不这样做,因为我无法绕过这些限制。

于 2012-11-29T17:51:46.670 回答