0

私はxcodeにかなり慣れていないため、スクロールビューに問題があります。スクロールビューは正常に機能します...ただし、ストーリーボードとプッシュを組み合わせて使用​​すると問題が発生します。スクロールビューを最初に表示したときは正常に動作しますが、新しいページにプッシュしてからスクロールビューでストーリーボードに戻ると、スクロールしなくなります。これはdidloadと関係があると思いますが、おそらくwillappearを使用する必要がありますか?コードは以下です。このストーリーボードに戻るたびにストーリーボードをリロードするように、このコードを何らかの形で変更する必要があると思います...他の誰かがこの問題に遭遇したか、修正方法についてアドバイスしていますか?

//
//  PrintViewController.m
//
//

#import "PrintViewController.h"

@interface PrintViewController ()

@end

@implementation PrintViewController
@synthesize PrintScroller, rememberContentOffset;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [PrintScroller setScrollEnabled:YES];

    // Do any additional setup after loading the view.
}

- (void) viewDidAppear:(BOOL)animated {
    [PrintScroller setContentSize:CGSizeMake(300, 595)];

}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES];
    self.PrintScroller.contentOffset = CGPointMake(0, 0);
}

- (void)viewWillDisappear:(BOOL)animated {
    self.rememberContentOffset = self.PrintScroller.contentOffset;
    [super viewWillDisappear:animated];
}

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    self.PrintScroller.contentOffset = CGPointMake(0, self.rememberContentOffset.y);
}



- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
4

1 に答える 1

0

あなたの問題はここにあると思います:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    self.PrintScroller.contentOffset = CGPointMake(0, self.rememberContentOffset.y);
}

このメソッドは、ユーザーがスクロールしているときに、システムによって繰り返し呼び出される可能性があります。コンテンツ オフセットを毎回設定しているため、ビューは移動しません。これを 1 回だけ実行してから、たとえば に設定self.rememberContentOffsetCGPointZero、記憶されたオフセットがゼロの場合はコンテンツ オフセットを変更しないようにする必要があります。何かのようなもの:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    if (self.rememberContentOffset.y > 0) {
        self.PrintScroller.contentOffset = CGPointMake(0, self.rememberContentOffset.y);
        self.rememberContentOffset = CGPointZero;
    }
}
于 2013-11-06T17:51:13.067 に答える