画像ビューに画像(幅:320ピクセル、高さ:1250ピクセル)を表示したい。
アプリケーションをコンパイルすると、まったくスクロールしません。ビューは固定されたままです。
私がしたこと:
UIScrollView
をビューに追加しました。UIImageView
をビューに追加しました。UIImageView
がUIScrollView
の下にあることを確認しました。UIScrollView
のサイズをViewDidLoad
で設定します。どうすればいいですか?
コード:
- (void)viewDidLoad
{
[super viewDidLoad];
scrollView.contentSize = CGSizeMake(320, 1250);
}
スクリーンショット:
ImageView
:
ScrollView
:
私はちょうど同じタスクを実行しました..これを試してください.....
scrollView.delegate = self;
scrollView.scrollEnabled = YES;
int scrollWidth = 120;
scrollView.contentSize = CGSizeMake(scrollWidth,80);
int xOffset = 0;
imageView.image = [UIImage imageNamed:[imagesName objectAtIndex:0]];
for(int index=0; index < [imagesName count]; index++)
{
UIImageView *img = [[UIImageView alloc] init];
img.bounds = CGRectMake(10, 10, 50, 50);
img.frame = CGRectMake(5+xOffset, 0, 50, 50);
NSLog(@"image: %@",[imagesName objectAtIndex:index]);
img.image = [UIImage imageNamed:[imagesName objectAtIndex:index]];
[images insertObject:img atIndex:index];
scrollView.contentSize = CGSizeMake(scrollWidth+xOffset,110);
[scrollView addSubview:[images objectAtIndex:index]];
xOffset += 70;
}
これも設定してください。
imagesName = [[NSArray alloc]initWithObjects:@"image1.jpg",@"image2.jpg",@"image3.jpg",@"image4.jpg",@"image5.jpg",@"image6.png",@"image7.png",@"image9.png",nil];
images = [[NSMutableArray alloc]init];
私にとって問題は、viewDidLoad()
でコンテンツサイズの設定が機能しないことでした。私はすべてを試しましたが、なぜ動作しないのか理解できませんでした。viewDidAppear()
で同じことを試したところ、魔法のように動作しました...
あなたの最後のスクリーンショットとあなたのコメントから、scrollViewは大きくなっているように見えます。 scrollviewは、画面上に完全に表示される必要があります。たとえば、iPhoneのフルスクリーンUIScrollViewのサイズは320 x 460です。
スクロールビューがコンテンツと同じサイズの場合、スクロールできません。
緑がかった長方形はスクロールビューのサイズを示し、ピンクがかったコンテンツ(画像)のサイズを示します。
同様の問題があることがわかりましたが、上記のコードはどれも動作しませんでした。この問題は自動レイアウトによるものでした。 [ユーティリティ]-> [ファイルインスペクター]をクリックしてストーリーボードに移動して自動レイアウトをオフにし、Use Autolayout
スクロールは機能しました(私もscroll.contentSize = ...
)。
Xcode 5以降、以前のようには機能しません。また、スクロール可能なテキストフィールドの最後までスクロールすると問題が発生します。 iPhoneまたはiPadで実行する場合にも違いがあります。 iPhoneでは、遅延タイマーなしで機能しました。
これは私のために働いた:
- (void)viewDidLoad
{
[super viewDidLoad];
NSTimer *timerforScrollView;
timerforScrollView =[NSTimer scheduledTimerWithTimeInterval:0.1
target:self selector:@selector(forScrollView)userInfo:nil repeats:NO];
}
- (void) forScrollView {
[scrollviewPad setScrollEnabled:YES];
[scrollviewPad setContentSize:CGSizeMake(768, 1015)]; // must be greater then the size in Storyboard
}
IOS6でこの同じ問題に遭遇しましたが、解決策はContentSizeをプログラムで調整することでした。したがって、これを示すためにラジャ(上記)から引用します。
CGSize scrollViewContentSize = CGSizeMake(320, 400);
[self.scrollView setContentSize:scrollViewContentSize];
注:iOS5ではこの問題はありませんでした..iOS6は、回転/方向のサガのようにいたずらをたくさんすることにしたようです
Swift 4、iOS 11
自動レイアウトを使用する最も簡単な方法:
追加することを忘れないでください カテゴリー このようなインターフェースへのプロトコル
@interface MyViewController : <UIScrollViewDelegate>
そうしないと、スクロールビューのデリゲートをselfに設定できません。
(つまり、[MyScrollView setDelegate:self];
)
これを行うと、動作するはずです。
私のコードは:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[contentScrollView setDelegate:self];
[contentScrollView setScrollEnabled:YES];
contentScrollView.contentSize = CGSizeMake(310, 500);
contentScrollView.frame = CGRectMake(5, 188, 310, 193);
}
XibでautoLayoutチェックボックスがチェックされている場合があります。また、xcode 5でこの問題が発生します。これにより、UIScrollViewがスクロールオフになります。
スクロールのビューデリゲートを割り当てましたか?これらを常に覚えておいてください:
[self.scrollView setDelegate:self];
[self.scrollView setScrollEnabled:YES];
画像ビューは、スクロールビューのサブビュー(つまり、内側と下)でなければなりません。あなたの説明から、彼らは平行であるようです
1行忘れました。これをビューロード関数に追加します。
[scrollView setScrollEnabled:YES];
AutoLayoutを無効にしてみてください。 XCode 5では、上記のすべての回答をテストしましたが、自動レイアウトを無効にし、サイズインスペクターですべての自動サイズ変更マスクをアクティブにすることによってのみスクロールできました。次のコードも使用されました。
self.scrollView.contentSize = CGSizeMake(320, 900);
self.scrollView.delegate = self;
self.scrollView.scrollEnabled = YES;
self.scrollView.frame = self.view.frame;
コードを追加するだけ
scrollView.contentSize = CGSizeMake(WIDTH,HEIGHT);
メソッドへ-(void)viewDidLayoutSubviews。詳細については、View Controllerのライフサイクルを理解するためのStanford CS193p Lecture No 8をご覧ください。
私は同じ問題を抱えていて、このスレッドで答えを探していました。私はすべてを試しましたが、何も機能しません。それから私はこれを見つけました:
。
ViewController
のファイルインスペクタで"Use Auto Layout"を選択解除するだけです。タダ、それは私のためにすぐに動作します。楽しい。
CGRect scrollViewFrame = CGRectMake(0, 0, 320, 400);
self.scrollView = [[UIScrollView alloc] initWithFrame:scrollViewFrame];
[self.view addSubview:self.scrollView];
CGSize scrollViewContentSize = CGSizeMake(320, 400);
[self.scrollView setContentSize:scrollViewContentSize];
scrollView.delegate = self;
[self.scrollView setBackgroundColor:[UIColor blackColor]];
[scrollView setCanCancelContentTouches:NO];
scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
scrollView.clipsToBounds = YES;
scrollView.scrollEnabled = YES;
scrollView.pagingEnabled = YES;
NSUInteger nimages = 0;
CGFloat cx = 0;
for (; ; nimages++) {
NSString *imageName = [NSString stringWithFormat:@"image%d.jpg", (nimages + 1)];
UIImage *image = [UIImage imageNamed:imageName];
if (image == nil) {
break;
}
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
CGRect rect = imageView.frame;
rect.size.height = image.size.height;
rect.size.width = image.size.width;
rect.Origin.x = ((scrollView.frame.size.width - image.size.width) / 2) + cx;
rect.Origin.y = ((scrollView.frame.size.height - image.size.height) / 2);
imageView.frame = rect;
[scrollView addSubview:imageView];
[imageView release];
cx += scrollView.frame.size.width;
}
[scrollView setContentSize:CGSizeMake(cx, [scrollView bounds].size.height)];
ScrollViewがビューのサブビューであり、それを完全に埋めると仮定すると、viewDidLoadで次を使用できます。
[scrollView setContentSize: CGSizeMake(self.view.frame.size.width, self.view.frame.size.height)];
スクロールしていないUIScrollViewがあったため、スクロールできました。