2013-07-16 13 views
5

私はアプリケーションでスクロールビューを持っており、ストーリーボードで初期化されていますが、フレームを変更しようとしています。すべてがうまくいくように見えますが、フレームとコンテンツのサイズが設定されてからわずかな時間が経過しても、メソッドが返された後は、それらは異なります。ここでは、コードされています。期待通りUIScrollViewは不思議なようにフレームとコンテンツのサイズを変更します

CGFloat inputHeight = inputView.frame.size.height; 
originalContentHeight = self.scrollableContentView.frame.size.height; 
NSLog(@"%f", self.scrollableContentView.frame.size.height-inputHeight); 
[self.scrollableContentView setFrame:CGRectMake(self.scrollableContentView.frame.origin.x, self.scrollableContentView.frame.origin.y, self.scrollableContentView.frame.size.width, self.scrollableContentView.frame.size.height-inputHeight)]; 
NSLog(@"%f", self.scrollableContentView.frame.size.height); 
NSLog(@"%@", self.scrollableContentView); 

これらのログの出力がすべてです、それは次のようになります。

<UIScrollView: 0x808de00; frame = (0 0; 320 81); ... > 

しかし、私は別のメソッドにブレークポイントを設定している場合、呼び出された時点で、さらに

<UIScrollView: 0x808de00; frame = (0 0; 320 416); ... > 

、などのコンテンツサイズの変更:

scrollViewをログに記録することは、この示し

(width=320, height=504) 

への値の両方は、ビューが最初にレイアウトされたときに、彼らが持っている値に自動的に戻すように見えます。私は、スクロールビューのgetterとsetterにブレークポイントを設定しており、予期しないアクセスが見つからないため、変更が内部的に発生していると判断しました。これは正当な結論ですか?何がうまくいかないでしょうか?

+0

自動調整スプリングを調整可能な高さに設定できますか? – Jamie

+0

どこにあるのでしょうか? – Jumhyn

+0

これは自動レイアウトのためです。オフにするか、フレームを設定するのではなく、制約を調整してスクロールビューのサイズを変更してください。 – rdelmar

答えて

6

autolayoutを使用している場合は、スクロールビューのフレームを設定せずに、制約を変更する必要があります。

私の答えは同様の質問hereを参照してください。プログラムで制約を設定する方法の例へのリンクがいくつかあります。

また、どの方法でframecontentSizeを設定していますか?ストーリーボードを使用しているため、viewDidLoadまたはviewWillAppear:にある場合は、代わりにこのコードをviewDidLayoutSubviewsに移動する方がよいでしょう。

+0

私は本当に 'viewDidLayoutSubviews'(私の質問履歴によると)のコードを持っています。私は今日これを後で試してみます。 – Jumhyn

+1

制約があります。私は実際にそれを行う最良の方法はInterface Builderでコンセントをコンセントに追加してから、 'constant'プロパティを編集することでした。 – Jumhyn

+0

@Jumhynはい、それはストーリーボードに既に存在する制約を変更する簡単な方法です。あなたはそれが働いてうれしい! –

関連する問題