web-dev-qa-db-ja.com

UIScrollViewをInterfaceBuilderに追加する方法は?

私はすべてのコントロールをInterfaceBuilderに配置しています(多くのラベル、ボタンなど)。 Interface Builderのスクロールビューにそれらすべてを配置して、より多くのスペースを確保し、上下にスクロールしてより多くのコントロールを表示できるようにするにはどうすればよいですか?これをプログラムで行う必要がありますか?

20
erotsppa

すべてのコントロールやラベルなどが含まれているビューを開きます(Interface Builderで)。すべて選択。次に、[エディタ]メニューで[埋め込み]、[スクロールビュー]の順に選択します。

注:古いXcodeバージョンでは、これは[レイアウト]メニュー、[オブジェクトの埋め込み...](スクロールビュー)の下にあります。

30
mahboudz

ContentSizeのサイズをハードコーディングする必要がない私の推奨ソリューション:


注意:ここでのトリックを使用して、これのソースコード部分を回避できる可能性があります: https://stackoverflow.com/a/11239123/153422 -まだ試していませんが。

このトリックの残りの部分...とにかく使用する必要があります


  1. すべてのコントロールを単一のUIViewに移動します(IBの場合:すべてを選択してから、[レイアウト]> [オブジェクトの埋め込み...]> [表示]に移動します)

  2. IBOutletプロパティを使用して、その単一のUIViewをソースコードに接続します(以下を参照)。

  3. ソースコードでは、インターフェイスビルダーではありません(IBはここで壊れています、UIScrollViewの原点を誤って設定するバグがあります-ビューを中央に配置しようとします。Apple基本的なものをチェックする必要はありませんバグ、ため息):単一のUIViewをUIScrollViewに移動します(以下のコードを参照)。

  4. SizeThatFitsを使用して、正しいサイズを「自動的に」設定します。

コード(StackOverflowではコードを番号付きリストに入れることはできません。ため息)

ヘッダーファイル:

/** outlet that you hook up to the view created in step 1 */
@property(nonatomic, retain) IBOutlet UIView *masterView;

クラスファイル:

/** inside your viewDidLoad method */
[scrollview addSubview: masterView]; // step 3
scrollView.contentSize = [masterView sizeThatFits:CGSizeZero]; // step 4

...最近これを確認していませんが、IIRCは2.xと3.xの両方で動作します

25
Adam

それが私だけかどうかはわかりませんが、ここにある他の各回答の指示に従おうとしましたが、どれもうまくいきませんでした。答えのどれも必要なすべてを含んでいませんでした、私たちが何かをすることを知っていると仮定して、その部分を省いて、それぞれが推測します。私はついに 赤い職人の助けを借りてそれを理解しました。 だから...私はこれを機能させるために必要なすべてのステップをここにリストしています:

  1. InterfaceBuilderで、ビューを追加してからコントロールを追加します(または、コントロールがメインビューに既に存在する場合は、すべてのコントロールを選択して、[エディター]、[埋め込み]、[ビュー]の順に移動し、新しいビューをドラッグしてすべてそれ自体がメインビューの外にあります)。このビューは、任意のサイズにすることができます。

  2. InterfaceBuilderで、メインビューにスクロールビューを追加し、メインビュー全体を占めるようにサイズを変更します。

  3. 以下にリストされているコードをUIViewControllerヘッダーファイルとクラスファイルに追加します。

  4. InterfaceBuilderで、コントロールを含むビューをファイルの所有者の「contentView」に接続します。スクロールビューをファイルの所有者の「scrollView」に接続します。

ヘッダーファイル:

 @ interface MyViewController:UIViewController 
 @ property(nonatomic、retain)IBOutlet UIScrollView * scrollView; 
 @ property(nonatomic、retain)IBOutlet UIView * contentView; 

クラスファイル:

 @ synthesize scrollView、contentView; 
 
-(void)viewDidLoad 
 {
 [super viewDidLoad]; 
 [self.scrollView addSubview:self.contentView]; 
 self.scrollView.contentSize = self.contentView.bounds.size; 
} 
 
-(void)viewDidUnload 
 {
 self.scrollView = nil; 
 self.contentView = nil; 
 [super viewDidUnload]; 
} 
4
Harris

それは簡単です:

まず、スクロールビューをビューに追加します。スクロールビューのサイズを変更します(たとえば、700ピクセルの長さにします)。コントロールの配置を開始する下部(非表示)部分にコントロールを配置/編集する場合は、スクロールビューを選択し、Y開始位置を-300に変更します。出来上がり。編集後、Y開始位置を0またはそれが何であれに戻します。

4
Ximonn

スクロールビューに配置するすべてのオブジェクトを選択して[レイアウト]メニューに移動し、[オブジェクトを埋め込む]を選択して[スクロールビュー]を選択します。

3
Marc W

重要な小さなこと。 UIScrollViewで大きなサブビュー(たとえばUIImageView)をスクロールするには、このサブビューについて、InterfaceBuilder-> [ビュー]ウィンドウの[ユーザーインタラクションを有効にする]チェックボックスをオフにすることを忘れないでください。または、プログラムで実行します。

subview.userInteractionEnabled = NO;

それ以外の場合、このサブビューは効果なしに画面にスタックされます。

1
Vitaliy A

この質問は非常に古いものですが、同じ問題が発生し、多くのヘルプを見つけることができなかったため、見つけた回避策を提案します。

IBの場合、オブジェクトを420ピクセルの外側に配置する場合は、スクロールビューを含むビューのステータスバー、トップバー、およびボトムバーのすべてに指定なしを選択していることを確認してください。すべてのオブジェクトで。このようにして、画面のサイズを手動で変更できます(ビュー用)。次に、スクロールビューの[〜#〜] h [〜#〜]値のサイズ変更、他のすべてのオブジェクトへのアクセス、それらの操作、変更の取り消しに関するXimonnのアドバイスに従うことができます。 for [〜#〜] h [〜#〜]値を入力し、必要なバーを設定します。

1
carlos_ms

私はこれを数日間探していました、そして私はついに私のために働く解決策でこのサイトに出くわしました。

IScrollViewでスクロール

基本的に、UIScrollViewオブジェクトを含むメインビューがあります。次に、すべてのコンテンツを含む別のコンテンツビュー。次に、コンテンツビューをスクロールビューに追加します。そして最後に、スクロールビューのコンテンツサイズのサイズをコンテンツビューのサイズに設定します。

0
Jason

私は知っている、このスレッドは少し古いです...しかし、誰かがグーグルでそれを見つけることができました、それは最高ランクです。私は仕事を成し遂げるためにこの小さなヘルパーメソッドを書きました:

- (void)addSubview:(UIView *)theSubView toScrollView:(UIScrollView *)theScrollView
{
    [theScrollView addSubview:theSubView];
    theScrollView.contentSize = theSubView.bounds.size;
}

ヘッダーで2つのIBOutlet(たとえば、contentViewscrollView)を宣言し、UIViewUIScrollViewソースコード付き:

[self addSubview:contentView toScrollView:scrollView];

ViewDidLoadで呼び出しました

この方法はiOSを特徴としています

0

選択した回答はXcode3でうまく機能します。

ただし、Xcode 4では、メニューが少し再配置されています。

Xcode 4で同じことを行うには、ビューを選択してから次を使用します。

エディター>埋め込み>スクロールビュー

0
Snowcrash