web-dev-qa-db-ja.com

iOS7 / xcode 5にアップグレードした後、UIScrollViewがスクロールしない

私はxcode 4.5とios 6.1でスクロールするときに完璧に機能するアプリを持っています。ただし、xcode 5およびiOS 7をダウンロードした後、スクロールビューが機能しなくなります。

これが私の.hファイルです:

#import <UIKit/UIKit.h>

@interface GrillretterViewController : UIViewController
@property (strong, nonatomic) IBOutlet UIScrollView *grillretterScroller;
@property (assign) CGPoint rememberContentOffset;

@end

そして、これが私の.mファイルです:

#import "GrillretterViewController.h"

@interface GrillretterViewController ()

@end

@implementation GrillretterViewController
@synthesize grillretterScroller, rememberContentOffset;

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

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

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

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

}

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

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

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



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

@end

助けてください!行き詰まっている!

宜しくお願いします!

19

これを解決するには、スクロールビュー内のメインビューの[ファイルインスペクター]ペインで[オートレイアウトの使用]を選択解除します。

enter image description hereenter image description here

'Autolayout'を有効にしたい場合は、 'Editor-> Reslove Autolayout Issues-> Add Missing Constraints'を試してください。重要な制約は「ボトムスペース:スーパービュー」であるように見え、私の場合は-300で、ビューの下部に300のスクロールスペースが与えられました。

50
Jim Holland

User2394787が述べたように:

スクロールビューがあるビューコントローラーを選択して、次に移動します

Editor -> Resolve AutoLayout Issues -> Add Missing Contraints in [your view controller].  

これでうまくいきます。

上記の回答に投票しようとしましたが、十分な担当者がいません。

28
Jasen Su

Editor> AutoLayout Issues Resolve> Add Missing Constraints in View Controllerに移動して解決しました

お役に立てれば。

8
diogo.appDev

「垂直スペース」を自動定数値に設定するだけです。場合によっては役立つかもしれません。

Click the "Vertical Space"

属性インスペクターで設定します

tick that Standard

お役に立てば幸いです。 THX。

6
Pokotuz
- (void)viewDidLayoutSubviews {
    [self performSelector:@selector(updateContentSize)
               withObject:nil
               afterDelay:0.25];

}

-(void)updateContentSize{
    UIView *viewLast = [viewContent viewWithTag:100];
    scrollViewAd.contentSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, CGRectGetMaxY(viewLast.frame));
}
2
pkc456

これがうまくいくかどうかわかりません

- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [grillretterScroller setContentSize:CGSizeMake(self.view.bounds.size.width, 915)];
}
2
Camo

AutoLayoutを有効にして、UIScrollViewとそのサブビューの間に垂直間隔(@ "V:|-[subview]-|")が適用されていることを確認します。 scrollViewが水平スクロール用の場合は、水平間隔(@ "H:|-[subview]-|")を適用します。

0
MkVal

固定の高さを持っていなかったので、スクロールビュー内のラベルに従ってコードでスクロールビューのコンテンツサイズを設定しました

CGSize scrollViewContentSize = CGSizeMake(320, myLabel.frame.size.height);
[self.scrollView setContentSize:scrollViewContentSize];
0
Priebe

IOS8用のアプリを開発し、その後iOS7でテストしたところ、同じ問題が発生しました。私はスクロールビューに次のような特定のオプションを設定しようとしましたが:

[self.scrollView setScrollEnabled:YES];
[self.scrollView setContentSize:CGSizeMake(self.view.frame.size.width, 700)];
[self.scrollView setContentOffset:CGPointZero];

私にとってうまくいった解決策は、ストーリーボードファイルに移動し、スクロールビュー内のすべてのビューに制約が設定されていることを確認することでした。スクロールビューのコンテンツサイズは、スクロールビュー内の各サブビューの制約によって計算されるため、私の場合、UIViewとUITableViewがありました。 UIView(上部、リーディング、トレーリング、高さ)、およびUITableView(UIViewへの垂直間隔、リーディング、トレーリング、下部)の制約を設定した後、スクロールビューはコンテンツサイズを計算し、機能し始めました。

自動レイアウトをオフにしても機能しますが、すべての人にとって理想的なソリューションとは限りません。ストーリーボードをいじって、スクロールビューのすべてのサブビューに制約を設定し、スクロールビューの上部から下部に垂直線の制約を設定します。

0
Andy Shephard