2016-08-15 12 views
8

ここでは動作するものについて簡単に質問しますが、はるかに優れています。私はUIScrollViewとオブジェクトのリストを内側に配置しています。すべてはviewDidLoad()の間に行われ、オブジェクトの配置にはAuto Layoutが使用されます。ここではUIScrollViewの高さをcontentSizeの適切な値に設定する方法を説明します。自動レイアウトを使用する場合のUIScrollViewのcontentSizeの計算

override func viewDidAppear(animated: Bool) { 
    super.viewDidAppear(animated) 
    globalView.contentSize = CGSize(width: globalView.frame.width, 
            height: globalView.frame.height * 1.59) 
} 

これは機能しますが、任意の値1.59は明らかに私がいくつかの値を試して決定しています。 このような場合にcontentSizeを計算する適切な方法は何ですか?私はプログラム的にすべてをやっています。 ネットを検索しても簡単ではっきりとした答えが得られませんでしたので、多少重複した質問かもしれませんが、私はそれを再調整することにしました。

+0

あなたはUIScrollViewのに制約を設定することについての同じトピックに関する回答の多くを見つけることができます。 UIScrollView内のすべてのコンポーネントに制約を正しく設定すると、プログラムで定数のサイズを設定する必要はありません。同じことを説明しているこのリンクを参照してください - http://stackoverflow.com/questions/35624873/ios-scrollview-needs-constraint-for-y-position-or-height/35625897#35625897 –

+0

真実ですが、そのほとんど(すべて)が推測しますあなたはストーリーボードを使用しています:) – Michel

答えて

46

プログラムでコンテンツサイズを与えるのは良い方法ではありません。 autolayoutを使用して の作業を行う以下の解決策は、コンテンツサイズをまったく設定する必要はありません。表示する追加されたUIフィールド数は になります。

ステップ1:

(すべての値はゼロである) ストーリーボードに表示し、リーディング、末尾、上部および底部制約を追加するScrollviewを加えます。

ステップ2:

あなたが直接(つまり、すべてのUI要素のため、当社のコンテンツビューになります)最初はscrollview 1つのビュー を追加し、scrollview上の必要に直接意見を追加しないでください。 以下の制約をこのビューに追加します。

1)先頭、末尾、上端および下端の制約 (すべての値はゼロ)。

2)メインビュー(つまりスクロールビューを含む)と同じ高さ、等幅を追加します。 等しい高さの場合、優先順位を低く設定します。 (これはコンテンツサイズを設定するための重要なステップです)

3)このコンテンツビューの高さは、ビューに追加されたビューの数に従います。 は、あなたが最後のビューを追加した場合としましょうつのラベルであり、彼のY位置が420、高さ であることは、あなたのコンテンツビューが440

ステップ3になります20:あなたがコンテンツ内追加ビューのすべてに制約を追加します。あなたの要件に応じて表示します。私は、これは間違いなくあなたを助けることを願っています

enter image description here

enter image description here

:参考

+0

それは面白いと聞こえますが、私はストーリーボードを使用していません。プログラムで作業するときに、これらの説明をどのように適用するかを知る必要があります。最初の質問は、ステップ2でどのようにコンテンツビューとしてビューを設定するのですか? – Michel

+0

通常のビューです。私はscrollviewに追加しました(contentViewとして扱います)。その後、そのビューですべてのUI要素を配置します。 –

+1

私はついにそれをやった、それはプログラム的に、私が望む方法で動作します。しかし、私はまだこのcontentviewの仕組みがどのように働いているのか分かりません。異なる高さの3つのサブビューを追加するとどうなりますか?どちらがコンテンツビューと見なされますか? – Michel

1

私はついにこの問題を解決して動作させましたが、 関連する回答がストーリーボードのユーザーに向けられているため、ネット上で見つけることができたことに気づいた。しかし、プログラムで私の手を動かすことはできません。

私は、これを実現する方法を示すために非常にシンプルなデモアプリケーションを作成することにしました。ある時点で誰かに役立つことを願っています。ここで

はGitHubの上でそれを取得するためのアドレスです: https://github.com/zaxonus/AutoLayScroll

+0

この例題は、すべてをプログラムで行う方法を示すために作成されました。 XIB(ストーリーボード)を使用したい場合は、ネット上に多くの例があります。最初のものは、上記の答えであり、受け入れられた答えです。 – Michel

+0

これは優れています。いくつかのことを試してみると、これが働いたのは唯一のものです。注意、Swift 3で動作し、変数の名前を変更します。ありがとうございます。 – mike

関連する問題