私のXcode 6.2 Swiftプロジェクトでは、自動レイアウト(サイズクラスも使用しています)に問題があり、それを理解できません...
Main.storyboard には、ビューの反対側の同じ高さに配置されたaUIButton
と aなどのインターフェイス要素を含むビューがあります。UISegmentedControl
Interface Builder ですべての制約を手動で設定しています (コードにはありません)。この場合を除いて、すべてのビューが正常に機能しています (この特定の問題は、長いテキストがある場合にのみ発生します)。
ボタンはビューの左端に揃えられ、その制約は次のとおりです。
- スーパービューへの先行スペース == 0
- セグメント化されたコントローラーへの末尾のスペース >= 8
- 他のインターフェイス要素への上部と下部のスペース == 8
セグメント化されたコントローラー (2 つのセグメントを持つ) は、ビューの右側の境界線に配置され、その制約は次のとおりです。
- スーパービューへの末尾のスペース == 0
- ボタンの先頭のスペース >= 8
- 他のインターフェイス要素への上部と下部のスペース == 8
ストーリーボードのボタンには「タイトル」というタイトルが付いていますが、実際には実際のタイトルは常に次のコードで設定されていますViewWillAppear
。
myButton.setTitle(aStringThatSometimesIsPrettyLong, forState: .Normal)
(考えられるすべてのデバイスと向きで) 達成する必要がある視覚的な結果は、コードで設定したボタンのタイトルが、インターフェイスで十分な長さで表示できる一方で、ラベルを圧縮して、セグメント化されたコントロールのサイズを決して妥協しないことです。 2 つのセグメントの。 したがって、セグメント化されたコントロールのサイズを固定する必要があり、ボタンのタイトルが長い場合はドットで切り詰めることができるという事実を受け入れます。代わりに、ボタンのタイトルが非常に長い場合、何を試しても(すぐに試したことを説明します)、切り捨てられません。代わりに、セグメント化されたコントロールが圧縮されているため、2 つのセグメント ラベルが切り捨てられます。
これまでのところ、次の手順を個別に、または一緒に試しました。
- セグメント化されたコントロールに幅の最小制約を追加します。
- ボタンの対応する値を減らしながら、セグメント化されたコントロールのコンテンツ圧縮抵抗を増やしました (段階的に、最大 1000 まで)。
- ボタンのコンテンツ保持優先度を上げました (最大 1000)。
- ボタンに最大幅を設定することはできないと思います。これは、コードで設定されたタイトルと、さらに重要なことに、アプリが実行されているデバイスに応じて伸びる可能性があるためです。
私の最大の問題は、何を試しても、アプリを実行すると常に同じ動作になることです (ボタンのタイトルが完全に表示され、切り捨てられず、セグメント化されたコントロールが圧縮されます)。これらの制約を追加しても何も変わらないように思えますが、自動レイアウトでこれまでに起こったことはありません...混乱、多く、しかし制約を追加しても変化はありません。これは新しいです!
ボタンのタイトルがViewWillAppear
ストーリーボードではなく設定されていることが問題なのかもしれませんが、コードでタイトルを設定できなかった場合、アプリは正しく動作しません。
最後に、非常に重要なことですが、これまでのところ、自動レイアウトとサイズのクラスをすべてのデバイスと、アプリのすべての (10 以上の) ビューコントローラーの向きで動作させることができましたが、実際には一度もAuto.layout クラスと Size クラスの 1 行のコードを記述しました。Interface Builder ですべてを実行しましたが、可能であれば、この方法を続けたいと思っています。
どんな提案でも本当に、本当に感謝しています!
前もって感謝します、
チェザーレ