2012-09-27 8 views
20

新しいiOS 6 SDKを使用して、自動レイアウトで非常に単純な要素を作成しようとしています。 私はImageViewを持ってそれをScrollViewに埋め込みました。 (すべてはInterface Builderでビルドされます)。 .pngファイルが設定され、imageViewモードが「左上」に設定されています。iOS 6で自動レイアウトを使用してScrollViewにImageViewを埋め込む

実装:私はアプリを実行すると

​​

、画像がスクロールされていません。自動レイアウトをオフにして(ストラットとバネを使って)同じことをすると、スクロールしています。 問題は制約があると思います。誰も助けてくれませんか?

答えて

52

私が更新しているチュートリアルで同じ問題が発生しました。私はプログラム的に制約を削除し、呪いを犯し、壁に頭をぶつけようとしました。

約5分前に、私は遭遇した別の問題を修正したものを試しました。 UIScrollViewが再び動作しています!解決策は、むしろのviewDidLoadよりも、viewDidAppearの実装にUIScrollViewのcontentSizeプロパティを設定し、古いコードを移動することでした:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    self.theScroller.contentSize=CGSizeMake(200.0,2000.0); 
} 

私は、これは他の誰か自動レイアウトで登場している頭痛のいくつかに遭遇するのに役立ちます願っています。

+0

この作品は、ありがとうございます!本当に奇妙なAppleはiOS 6のドキュメントでこれに関する情報を入れていない。おそらく問題は、制約が-viewDidLoadが呼び出された後に設定されているからです(ストーリーボードから来ているので、awakeFeomNibに設定する必要があります、私が知る限り、viewDidLoadよりも前にfasとして設定してください)。 – Vitaly

+2

scrollView内のimageViewのズームには別の問題があります。 – Vitaly

+0

私の神はとても迷惑だった。あまりにも多くの時間が無駄になりました! viewDidLoadからviewDidAppearに移動するとすぐに正常に機能しました。ありがとうジョン! – Andy

27

Autolayoutは最初は非常に混乱することがあります。実際には、スクロールビューのcontentSizeをどこにも設定したくないのです。純粋な自動レイアウトアプローチでは、スクロールビューは独自のコンテンツサイズを設定します。 iOS 6 release notesに自動レイアウトとUIScrollViewのセクションを参照してください:スクロールビューのサブビューに

制約は、その後 スクロールビューのコンテンツサイズと解釈され埋める サイズをもたらす必要があります。 (これは、自動レイアウトのために使用さ intrinsicContentSize方法と混同すべきではない。)

注これはscrollviewのサブビューに制約がに基づいて変化する幅を使用する明示的な幅と高さを設定してはならないことを意味しますスクロールビューの側面

ここで2番目のエラーは、UIImageViewのフレームを画像のサイズに設定したことです。 autolayoutではこれも不要です。 UIImageViewには、実際には下にある画像のサイズであるintrinsicContentSizeがあります。以下である必要があり、自動レイアウトでscrollviewに画像を配置することを意味する(これを変更するには、優先度の高い、幅と高さの制約を設定する必要があります)と持って、それが正しいコードをスクロール:

** nothing at all!!! ** 

しかし、あなたがそれに注意する必要があるものは、スクロールしないように見える画像を持つ原因になる可能性があります。

スクロールビューのサブビューを表示させることができます他のスクロールコンテンツに対して (スクロールしない)を浮動させるには、ビューとスクロールビューのサブビューの外側のビュー( など)。

インターフェイスビルダで制約を設定し、階層内のスクロールビューの上にあるビューに画像ビューを制限すると、ビューがスクロールする方法に影響します。マッド!

ハッピーコーディング...

+0

ありがとうございます。イメージビューを高優先順位の幅/高さに設定することに助けられました – bean

+0

ビューとスクロールビューのスーパービュー(例として)の間に制約を作成する方法が分かっているかどうかは分かりませんでした。私は今、しばらくの間試してきましたが、それを行う方法を見ることができません。 – Ants

+0

@Antsそれはまったく新しい質問のようですね!ここにリンクを張っておけば、私はそれを見ます。 – jackslash

関連する問題