1

GIFを投稿したかったのですが、どうやら評判が足りないようです。まあ、何でも; UIPageViewController を使用していましたが、何らかの理由で、UIScrollView を使用し、UITableViewControlllers のビューを対応するオフセット (ページ) に追加することで、より手動のソリューションを使用することにしました。各ページ (テーブル ビュー コントローラーのビュー) に 4 つの UItableViewControllers があり、これらはすべて子ビュー コントローラーとしてコンテナー ビュー コントローラー (UIScrollView を持つ) に追加されます。

実際の問題は、切り替えを行ったときに、テーブルビューが完全に下に行くことを拒否し始め、スクロールが終了したときに最終的なテーブルビューセルの一部が画面の終わりまでトリミングされたままになることです。

ここに画像の説明を入力

それで、これを取り除く方法を知る前に、誰かがこのようなものに出くわしたかどうか尋ねたかった. いつでもライブラリを使用できることはわかっていますが、学びたいです。ここにいくつかのコードがあります:

_containerScrollView = [[UIScrollView alloc] initWithFrame:self.view.frame];
_containerScrollView.contentSize = CGSizeMake(_containerScrollView.frame.size.width * 4, 0.0f);
_containerScrollView.pagingEnabled = YES;

[self.view addSubview:_containerScrollView];

UITableViewController *vc1 = [[UIViewController alloc] init];
UITableViewController *vc2 = [self.storyboard instantiateViewControllerWithIdentifier:@"trendingViewController"];
UITableViewController *vc3 = [self.storyboard instantiateViewControllerWithIdentifier:@"placesViewController"];
UITableViewController *vc4 = [self.storyboard instantiateViewControllerWithIdentifier:@"favoritesViewController"];

self.rallyViewControllers = [NSArray vc1, vc2, vc3, vc4, nil];

[self addViewControllers];

その他の方法;

- (void)addViewControllers{

     if (self.rallyViewControllers == nil) {

        return;

     }

     for (int i = 0; i < [self.rallyViewControllers count]; i++) {

         UIViewController* viewController = [self.rallyViewControllers objectAtIndex:i];

         [self addChildViewController:viewController];
         [viewController didMoveToParentViewController:self];

         [_containerScrollView addSubview:viewController.view];

     }

}

これはviewDidLayoutSubviews

- (void)configureFrames{

    if (self.rallyViewControllers == nil) {

    return;

    }

    CGFloat width = _containerScrollView.frame.size.width;
    CGFloat height = _containerScrollView.frame.size.height;

    for (int i = 0; i < [self.rallyViewControllers count]; i++) {

        UIViewController *viewController = [self.rallyViewControllers objectAtIndex:i];
        viewController.view.frame = CGRectMake(i * width, 0.0f, width, height);

    }

}
4

2 に答える 2

1

あなたの説明を完全には理解していないことを前もって述べておく必要があります

「テーブル ビューが完全に下に移動することを拒否し始め、スクロールが終了したとき、最後のテーブル ビュー セルの一部が画面の最後までトリミングされたままになります。」

私の答えは、以前に直面した問題に基づいています。私のセットアップは、ストーリーボード コンテナー ビューの uitableview です (親スクロールビューなし)

テーブルビューの一部が切り取られ、下の約5行が表示されないというこの問題に直面しました。


親コンテナ ビューとテーブルビューの間に制約を設定していないことがわかりました。


テーブルビューが正常にレンダリングされているかどうかを判断するには、プロジェクトを XCode で実行してから、下のボタンをクリックします。 ビューのビジュアル スタック

このボタンはアプリを一時停止し、アプリで現在レンダリングされているさまざまなビューの視覚的なスタックを提供します。次に、子のいずれか (この場合はテーブルビュー) が親ビューのフレームの外側にレンダリングされているかどうかを確認できます。その場合、その部分は表示されません。これは、制約がない (または) 現在の制約が正しくないことを示しています。

于 2015-08-18T16:44:23.223 に答える
0

わかった。問題は、ビュー コントローラーのビューをスクロール ビューに追加したときに、ナビゲーション バーがないかのようにディメンションが返されることでした。しかし、それらはまだナビゲーション バーの下に配置されていたため、全体のビューの高さが画面に表示できるよりも 64 ポイント多くなりました。ビューから 64 pt を手動で差し引いたところ、修正されました。しかし、それはこれを行う非常に大雑把な方法であるため、自動レイアウトをいじって修正しようとしましたが、うまくいきました。

于 2015-08-22T10:52:58.587 に答える