私は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
助けてください!行き詰まっている!
宜しくお願いします!
これを解決するには、スクロールビュー内のメインビューの[ファイルインスペクター]ペインで[オートレイアウトの使用]を選択解除します。
'Autolayout'を有効にしたい場合は、 'Editor-> Reslove Autolayout Issues-> Add Missing Constraints'を試してください。重要な制約は「ボトムスペース:スーパービュー」であるように見え、私の場合は-300で、ビューの下部に300のスクロールスペースが与えられました。
User2394787が述べたように:
スクロールビューがあるビューコントローラーを選択して、次に移動します
Editor -> Resolve AutoLayout Issues -> Add Missing Contraints in [your view controller].
これでうまくいきます。
上記の回答に投票しようとしましたが、十分な担当者がいません。
Editor> AutoLayout Issues Resolve> Add Missing Constraints in View Controllerに移動して解決しました
お役に立てれば。
「垂直スペース」を自動定数値に設定するだけです。場合によっては役立つかもしれません。
属性インスペクターで設定します
お役に立てば幸いです。 THX。
- (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));
}
これがうまくいくかどうかわかりません
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[grillretterScroller setContentSize:CGSizeMake(self.view.bounds.size.width, 915)];
}
AutoLayoutを有効にして、UIScrollViewとそのサブビューの間に垂直間隔(@ "V:|-[subview]-|")が適用されていることを確認します。 scrollViewが水平スクロール用の場合は、水平間隔(@ "H:|-[subview]-|")を適用します。
固定の高さを持っていなかったので、スクロールビュー内のラベルに従ってコードでスクロールビューのコンテンツサイズを設定しました
CGSize scrollViewContentSize = CGSizeMake(320, myLabel.frame.size.height);
[self.scrollView setContentSize:scrollViewContentSize];
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への垂直間隔、リーディング、トレーリング、下部)の制約を設定した後、スクロールビューはコンテンツサイズを計算し、機能し始めました。
自動レイアウトをオフにしても機能しますが、すべての人にとって理想的なソリューションとは限りません。ストーリーボードをいじって、スクロールビューのすべてのサブビューに制約を設定し、スクロールビューの上部から下部に垂直線の制約を設定します。