2

こんにちは私はとで自動レイアウトの問題がUIScrollViewありModalViewControllerます。サンプルコードとしてのコーディング手順は次のとおりです。

1)私UIViewControllerUIScrollViewsubView

UIViewController *viewController = [[UIViewController alloc] init];
UIScrollView *scrollView = [[UIScrollView alloc] init];

scrollView.translatesAutoresizingMaskIntoConstraints = NO;
[viewController.view addSubview:scrollView];

UIView *superView = viewController.view;
NSDictionary *viewsDict = NSDictionaryOfVariableBindings(superView,scrollView);

[superView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView(==superView)]|"
                                                                  options:0
                                                                  metrics:nil
                                                                    views:viewsDict]];
[superView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView(==superView)]|"
                                                                  options:0
                                                                  metrics:nil
                                                                    views:viewsDict]];

これは動作します

2)2つのサブビューを追加しますscrollView

UIView *view1 = [[UIView alloc] init];
view1.backgroundColor = [UIColor redColor];
view1.translatesAutoresizingMaskIntoConstraints = NO;
[scrollView addSubview:view1];


UIView *view2 = [[UIView alloc] init];
view2.backgroundColor = [UIColor greenColor];
view2.translatesAutoresizingMaskIntoConstraints = NO;
[scrollView addSubview:view2];

viewsDict = NSDictionaryOfVariableBindings(scrollView,view1,view2);


[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view1(==scrollView)]|"
                                                                   options:0
                                                                   metrics:nil
                                                                     views:viewsDict]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view2(==scrollView)]|"
                                                                   options:0
                                                                   metrics:nil
                                                                     views:viewsDict]];

[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view1(180)][view2(==scrollView)]|"
                                                                   options:0
                                                                   metrics:nil
                                                                     views:viewsDict]];


UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"open" forState:UIControlStateNormal];
btn.frame = CGRectMake(10, 10, 100, 100);
[view2 addSubview:btn];
[btn addTarget:self action:@selector(openPopOver) forControlEvents:UIControlEventTouchUpInside];

これも問題なく動作します

3)ビュー2しか表示されないコンテンツオフセットy180までスクロールします

[scrollView setContentOffset:CGPointMake(0, 180) animated:YES];

4)ModalViewController`ViewControllerでを開きます

- (void)openModal{
UIViewController *viewController = [[UIViewController alloc] init];

UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setTitle:@"close" forState:UIControlStateNormal];
btn.frame = CGRectMake(10, 10, 100, 100);
[viewController.view addSubview:btn];
[btn addTarget:self action:@selector(closePopOver) forControlEvents:UIControlEventTouchUpInside];


[self presentViewController:viewController animated:YES completion:nil];

}

ModalViewController5)レイアウトを閉じると、scrollView機能しませんでしたが、設定していない別のコンテンツオフセットにスクロールします。コンテンツオフセットをy180にリセットすると、スクロールビューのコンテンツサイズが間違っています。

- (void)closeModal{
[self dismissViewControllerAnimated:YES completion:^{

}];

}

誰かが私がこの問題を解決するのを手伝ってくれることを願っています。

4

3 に答える 3

6

これは、UIScrollViewsを使用したiOS自動レイアウトのバグである可能性があると思います。私の場合にのみ同様の問題が発生していました。詳細ビューにプッシュしてから、UIScrollViewであるマスタービューにポップバックしました。スクロールビューのコンテンツは上にシフトされます。スクロールビューを一番上までスクロールしてから、もう一度押してポップすると、正しくリセットされます。

テーブルビューの代わりにUIScrollViewをマスターとして使用して、すぐに使用できるマスター詳細アプリを試してみましたが、欠陥を示すことができました。

テーブルビューとコレクションビューにはこの問題はないようです。

于 2013-03-21T22:38:27.490 に答える
3

UIViewControllerpresentViewController:メソッドのドキュメントから:

このメソッドは、presentedViewControllerプロパティを指定されたView Controllerに設定し、そのView Controllerのビューのサイズを変更してから、ビューをビュー階層に追加します。ビューは、提示されたビューコントローラのmodalTransitionStyleプロパティで指定された遷移スタイルに従って画面上でアニメーション化されます。

したがって、ViewControllerのサイズ変更を目的としています。まあ、とにかく、Appleによって。

これを実行する1つの方法は、サイズ変更されたビューの座標をログに記録し、正確に何が変更されたかを推測することです。たぶん、これを防ぐ方法で制約を調整することができます。

または、このメソッドの完了ハンドラーですべてのサイズを変更してみてください。

于 2012-09-20T10:12:34.837 に答える
3

viewWillAppearおそらく、 ?のcontentoffsetをリセットできます。そして、あなたはすでに実装しました-(void)layoutsubviewsか?

于 2012-09-20T09:06:52.760 に答える