5

そのUIScrollViewため、iPadアプリには、単一の子ビュー(それ自体がすべてのコントロールの親)を持つがあります。スクロールはすべて正常に機能します。回転は正常に機能します(ビュー全体が縦向きに収まり、横向きにスクロールします)。で新しい画面を押してUINavigationControllerから戻ってくると、画面が壊れます。

スクロールビューの子のフレームがスクロール位置に対して上に移動したように見えますが、スクロールビューは下にとどまっています(子ビュー全体が上にシフトしています)。

文字通り何時間もストーリーボードで戦ってみましたConstraintsが、これを引き起こしている原因を突き止めることができません。

開始方法 ナビゲートして戻った後の様子

4

3 に答える 3

1

スクロール ビューと自動レイアウトで同じ問題が発生しました (iOS 6 - 動作しません、iOS 7 - 正常に動作します)。もちろん、これは完全な解決策ではありませんが、動作するようです。それがあなたを助けることを願っています:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [self performSelector:@selector(content) withObject:nil afterDelay:0.0];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    offset = self.scrollView.contentOffset;
}

- (void)viewDidDisappear:(BOOL)animated
{
   [super viewDidDisappear:animated];

   self.scrollView.contentOffset = CGPointZero;
}

- (void)content
{
    [self.scrollView setContentOffset:offset animated:NO];
}
于 2014-03-27T21:39:03.433 に答える
0

これが私が見つけた簡単な解決策です。(親ビューが contentSize 全体にまたがることを意図していると仮定します) UIScrollView のこのサブクラスを使用します。

@interface BugFixScrollView : UIScrollView
@end
@implementation BugFixScrollView
-(void)layoutSubviews
{
    [super layoutSubviews];
    UIView *view=[self.subviews firstObject];
    if(view)
    {
        CGRect rect=view.frame;
        rect.origin=CGPointMake(0, 0);
        view.frame=rect;
    }
}
@end

自動レイアウトが台無しになるたびに、原点をリセットするだけです。このクラスは、UIScrollView を配置した後にクラス名を変更するだけで、InterfaceBuilder で使用できます。

于 2015-06-10T03:22:20.357 に答える