2017-01-25 3 views
0

Xcode 8.2.1のSwift 3プロジェクトには、多くのデータ(フォームが本質的)を示すUILabels、UIButtons、UITextFieldsが多数あります。アプリはiPadのみ、横長のみ、ターゲットは9.0以上です。XCode 8.2.1 Autolayout:混雑しているUIViewControllerの混在に関する問題

私は手作業で制約を割り当てようとしましたが(時間がかかる)、ストーリーボードでIDEに「欠落制約の追加」と「推奨制約へのリセット」をさせてみました。 VCからすべての制約を削除すると、「フォーム」がほぼ正しいものになりますが、いくつかのものはまだ外れています。

私はviewDidLoad()や他の位置関連のコーディングで何もしていません。ここで

は私のストーリーボードのスクリーンショットです: Storyboard rendered using reset/suggested constraints

a)はどのようにすべきである: enter image description here

そしてここでは、提案された制約付きのiPadエアー2(iOSのバージョン10.2)シミュレータで同じのUIViewControllerでありますスペースやアラインメントが不可欠な、たくさんのコントロールが必要なautolayoutの使用についてはどうですか? b)特にサイズを割り当てるXCodeのサイズ変更ボタンとコントロールは何ですか?ストーリーボードが再開された時点で、今はサイズを変更しておく必要があります。

ご意見をお寄せください。心の麻痺と私は、7.3よりも古い機能に比べて、レイアウトで時間を無駄にしています。

+0

他のセクションに対して各UI要素を追跡するのではなく、論理セクションを他のセクションに対して自動レイアウトできるように、セクションを独自のサブビューに分割することがあります。 – Fonix

答えて

1

これは、iPadアプリでかなり複雑な画面を分割した例です。

enter image description here

メインビューは、二つのコンテナビューから成ります。左側のコンテナにはUIableViewContollerが埋め込まれ、右側にはUIViewControllerが埋め込まれています。 UIViewController自体は、別のUITableViewControllerを埋め込みます。各コントローラは、必要な変更を通信して、デリゲートを介してコンテナチェーンをバックアップします。

これにより、各コンテナセクションのレイアウトを制御することが可能になります。コントローラの制約が少なくて済むためです。

第2に、あなたがそこに詰め込んだすべてのビューのすべてのロジックを制御するいくつかのメガコントローラクラスを持っている可能性があります。独自のコントローラーに分割すると、メガクラスをUIのセクションだけを制御する別々のクラスに分割し、より読みやすくカプセル化されたコードにすることができます。

+0

連鎖するが、確かに理にかなっている。私のレイアウトにはいくつかのコンテナUIViewがありますが、これはさらに進んでいます。このルートを試してレポートを返すようにします。ありがとう。 –

+0

最終的には、これはおそらく、「あなたがそれに入れなければならない時間のために」解決策であると思います。提案していただきありがとうございます。今のところ、エンタープライズアプリケーションなので、私はAutolayoutを使わないので、狭いターゲットリストをサポートしています。 1日半をコントローラ内のサブビューにグループ化していましたが、それは助けになりましたが、新しいものを追加する手間はありませんでした。 Autolayoutはいくつかのビューではうまく機能しますが、他の人にとっては地獄です。 –

+0

あなたがビットごとにアプリケーションをリファクタリングするとき、少なくともアイデアは長期的にあなたを助けてくれることをうまく願っています。スタックビューを使用するのに役立つ唯一の他のものが、あなたが持っているすべてのビューを持つので、非常に多くのスタックビューを入れ子にすることは、頭痛のようなものかもしれません。がんばろう! – Frankie

関連する問題