1

コントローラーの作業を4日間行っていますが、問題を解決できません。

私のアーキテクチャを説明しましょう:

ScrollViewとanImageViewを含む「Rootview」があります(どちらもIBに追加されています)

次に、4つの外部ビューコントローラーがあります。

私が欲しいのは:4つのビューコントローラーをスクロールビューに配置し(これは正常に機能し、両方のビューがコードのscrollViewに追加されます)、ユーザーがビュー間をスクロールできるようにします

スクロールすると、ビューを50%に拡大縮小してから、100%に再拡大縮小する小さなアニメーションが表示されます。

IBで「自動レイアウト」を無効にすると、すべてがうまく機能します。私のアニメーションと私の見解の位置。しかし、iPhone4とiPhone5でアプリを動作させたいので、無効にすることはできません。

すべてのビューを正しく配置するための制約を実装する方法がわかりません。iPhone 4の画面に収まるように、ビューの高さを50ピクセルに変更したいだけです。

私の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 用の 2 つのストーリーボードを作成できます。アプリ デリゲートで、デバイスの画面サイズを調べて、適切なストーリーボードを読み込みます。

これも最善の解決策ではありませんが、.xib を使用して機能させることもできます。制約に頭を悩ませることができなかったので、これをしなければなりませんでした。

于 2012-11-29T17:51:46.670 に答える