2017-12-13 33 views
0

私はUIを構築するためにXamarinとXCode Interface Builderの組み合わせを使用しています。ScrollViewで動的UIViewを使用した自動レイアウト

画面ショットのように、一番上のプレースホルダービューは異なるコンテンツを持つことができます。私が抱えている問題は、SubmitボタンをContentViewの一番下に置いておくことです。

View A View B

私はContentViewアプローチでScrollViewを使用してIBに制約を設定しています。

ViewDidLoad()で、PlaceholderViewのコンテンツを読み込み、プログラムでPlaceholderViewの高さの制約を設定しました。

public override void ViewDidLoad() 
{ 
    onlineSuspectDetails = OnlineSuspectDetailsView.Create(); 
    onlineSuspectDetails.BackgroundColor = UIColor.Gray;      
    SuspectDetailsPlaceholderView.AddSubview(onlineSuspectDetails); 
    SuspectDetailsPlaceholderView.HeightAnchor.ConstraintEqualTo(onlineSuspectDetails.HeightAnchor, 1).Active = true; 
} 

は今のもちろん、私はそれが一種類 のために働いていますが、私はするために、PlaceholderViewの高さに応じてそれを変更する方法を見ることができないので、ボタンを提出のトップとボトムの制約を設定する必要がありました送信ボタンを一番下に置いてください。

Bottom制約にアクセスできたら、新しいTop制約を計算できますが、Bottom制約にアクセスする方法が見つかりません。これどうやってするの?

私はこの問題をどのように解決できるかについての代替提案はありますか?

+0

スクロールが必要なコンテンツ(画面に収まらないもの)が十分ある場合は、[送信]ボタンも*スクロールしますか?コンテンツがトップにスクロールされると、それは見えないのですか?または、「コンテンツ」が個別にスクロールするうちに、[送信]ボタンを*常に*下にしますか? – DonMag

+0

@DonMagはいボタンをスクロールしたい – empo

答えて

0

うーん...トリッキーなビット...

あり、それを行うには良い方法であることが、ここでは一つのアプローチである可能性があります

  • オレンジ=メインビューの背景
  • 淡黄色=スクロールビューの背景
  • グレー= UIView ... "ラベル/フィールドペア"コンテナ。ラベル/フィールドペアは、標準UIStackView
  • シアン= UIView ...「詳細」コンテナ
  • ダークグリーン=ボタン
  • レッド= UIViewている...これはトリッキーな部分です...「シムです「ボトム
  • のボタンを保持するために

enter image description here

ビューの制約は、私たちは、彼らがフルスクリーン/ビューを取っている場合よりも簡単にそれらを見ることができます8によってはめ込まれています。

位置とサイズのグレー表示と詳細表示の制限は単純です(このアスペクトに問題はないようです)。

この方法では、ボタンの位置を管理するために、 "Shim"ビューといくつかのより大きいか等しい等式を使用します。

Shimは先頭に固定され、ゼロから上に固定され、高さの制約はスクロールビューの高さに対して>= -30に設定されます。そのの下のの制約も、詳細ビューのの下のに対して、>= 8に設定されています。

これは超えない 30-PTS 少なくとも詳細の下、以下の8-PTSは表示スクロールビューの底からシムの底に置くために、自動レイアウトを伝えます。

次に、[送信]ボタンの上部が[シム]ビューの下部に拘束されます。

インタフェースビルダーのスクロールビューで作業するときに見つけた「奇妙なこと」が1つあります.IBが必要な制約に満足できるようにするには、本当に難しいかもしれません。競合は表示されますが、IBの「修正」に従うと、希望のレイアウトが失敗します。

私はIB/Storyboardsで実際には動作しませんので、実行時に自動レイアウトと制約の競合を避けることに焦点を当てます。

これはおそらく、実際のファイルを見て理解しやすいですので、私はGitHubのレポとしてこれを置く:あなたが実際にメインビューにボタンを追加する方法https://github.com/DonMag/SWMoreScrollViewStuff

-1

?これまで、ボタン以外のすべてのUIViewをマスターすることで、このようなことをしました。次に、ボタンをビューの下に置き、自動レイアウトをすべてに適用しました(ビューとボタンの0,0,0,0にする必要があります)。あなたのボタンは常にあなたのビューの前にあり、あなたは含まれているビューで他のすべてを行うことができますこのように!

関連する問題