79

スクロールビューとその背後にある画像ビューがあり、ペン先を配置しています。自動レイアウトを使用しています。両方のビューで、スーパービューするための下部スペースとスーパービューするための上部スペースがあります。画像ビューは、私が望んでいることを正確に実行します。iphone 5の場合、それは私が望むところです。また、他のiPhoneの場合は、画面の下部より上にあるため、サイズが正しく変更されます。スクロールビューはiphone5で正しく表示されますが、他の電話ではサイズが変更されないため、アプリのビューの下にスクロールダウンします。ログに次のメッセージが表示されます。

 2012-11-21 10:42:38.576 LCHApp[12604:907] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. 
  Try this: (1) look at each constraint and try to figure out which you don't expect;
  (2) find the code that added the unwanted constraint or constraints and fix it.
 (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer
  to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 

"<NSLayoutConstraint:0x1d8ea080 UIScrollView:0x1d8413b0.bottom == UIImageView:0x1d892110.bottom>",
"<NSAutoresizingMaskLayoutConstraint:0x1d8cca10 h=-&- v=-&- ScheduleViewNib:0x1d853630.height == UIScrollView:0x1d8413b0.height - 386>",
"<NSLayoutConstraint:0x1d8e5340 V:[UIImageView:0x1d892110]-(64)-|   (Names: '|':ScheduleView:0x1d8efc30 )>",
"<NSAutoresizingMaskLayoutConstraint:0x1d8cf520 h=--& v=--& V:[ScheduleView:0x1d8efc30(480)]>",
"<NSLayoutConstraint:0x1d8eaed0 V:|-(45)-[UIScrollView:0x1d8413b0]   (Names: '|':ScheduleView:0x1d8efc30 )>"


 Will attempt to recover by breaking constraint 
 <NSLayoutConstraint:0x1d8ea080 UIScrollView:0x1d8413b0.bottom ==      UIImageView:0x1d892110.bottom>

私はすでに試しました

[self setTranslatesAutoresizingMaskIntoConstraints:YES];

[self.myScrollView setTranslatesAutoresizingMaskIntoConstraints:YES];

私が見ることができることから、これはビューからすべての制約を取り除くだけです。そして、それは私が望むものではありません。

4

4 に答える 4

177

UIScrollViewと自動レイアウトの関係は、自動レイアウトの他の側面とは異なります。基本的に、単純な自動レイアウトが動作することを許可された場合、何もスクロールしません。たとえば、スクロールビューのサブビューが、スクロールビューの上部から10ポイントへの制約によって通常の方法で固定されている場合、絶対にそこに固定されます。スクロールビューがどのようにスクロールされても、移動することはありません。

この問題を解決するために、自動レイアウトを使用するUIScrollViewはまったく新しい方法で動作します。したがって、「自動レイアウトを使用しています」と言うときは、以前とはまったく異なる動作をするように準備する必要があります。を含む単一のスクロールビューサブビューとtranslatesAutoresizingMaskIntoConstraints = YES明示的なコンテンツサイズを使用する必要があります。そうでない場合は、すべてが必要translatesAutoresizingMaskIntoConstraints = NOであり、コンテンツサイズはサブビューの制約に基づいて暗黙的に推定されます。

これはhttps://developer.apple.com/library/content/releasenotes/General/RN-iOSSDK-6_0/index.htmlで非常によく説明されています

于 2012-11-25T03:37:05.870 に答える
162

自動レイアウトを使用する場合は非常に重要です。最後のサブビューの右または下、あるいはその両方をスクロールビューの右および/または下に固定する必要があります。これは、スクロールビューがコンテンツサイズを認識する方法です。例えば:

[scrollView addConstraint:[NSLayoutConstraint constraintWithItem:lastSubView
                                                 attribute:NSLayoutAttributeRight
                                                 relatedBy:NSLayoutRelationEqual
                                                    toItem:scrollView
                                                 attribute:NSLayoutAttributeRight
                                                multiplier:1.0
                                                  constant:0]];

完璧な例を提供してくれたこのサイトに感謝します。

私はこれのために時間を失いました、そして私は他の人に私の痛みを免れることを望んでいます。

于 2013-04-16T04:50:10.570 に答える
0

UIScrollviewsを制約でうまく機能させるために、ここで回答したこのアプローチを使用します。その答えでは、デバイスの回転でも機能する垂直スクロールスクロールビューを機能させる方法に取り組んでいます。水平方向にスクロールするスクロールビューを操作するためのアプローチを微調整することもできます。両方向にスクロールするスクロールビューの場合、幅に一致するサイズ制約のトリックを追加しないでください。しかし、他のすべては同じようにします。

于 2015-01-22T03:47:26.287 に答える
-3

いくつかのこと。

  1. 自動レイアウトがオンになっていることを確認します([ファイルインスペクター]タブのIB)
  2. 境界やフレームなどを含む変更を加えていないことを確認してください。これはすべて自動制約によって行われます。
  3. AutoResizingMaskに近づかないようにしてください。これは、新しい設定と競合します。これらが正しく行われていれば、ボタンをレイアウトすることができ、うまく機能します。方法は次のとおりです。

このエラーは、ペン先またはそのペン先内のコントロールのいずれかが自動レイアウトを使用していないことを示しています。

于 2012-11-24T05:55:13.360 に答える