タイトル、スクロール ビュー (テキスト用)、およびいくつかのボタンを含む単純なビューがあります。ストーリーボードにビューを作成しました。私のボタンの1つに影響を与える隠れた制約があるように見えることを除いて、すべてが完全に機能しています。
ボタンのタイトルはコードで設定されます。それらを設定すると、期待どおりにボタンが広くなります。ボタンには次の制約があります。
- それぞれの幅は >= 73
- 左ボタンには、ベース ビューの左端との間に標準の水平拘束があります。右ボタンには、ベース ビューの右端との間に標準の水平拘束があります。(つまり、それらをガイドに並べました。制約は自動的に作成されました。)
- 1 つのボタンの高さは 44 で、ベース ビューの下部に垂直方向の制約があります。
- もう 1 つは下と上に揃えられます。
それでおしまい。
私が抱えている問題は、2 つのボタンの間に十分なスペースがあるように見えても (そしてそれらの間に制約がないように見えても)、ボタンのテキストが十分に大きい場合、ボタンの側端からタイトルまでのインセットが事実上ゼロであるため、テキストはボタンの端にぴったりと表示されます。エッジインセットを手動で追加すると、
self.okButton.titleEdgeInsets = UIEdgeInsetsMake(0.0, 0.6, 0.0, 0.6);
テキストが押しつぶされます (楕円がテキスト内に表示されます)。一方、2 つのボタンの間には約 65 ポイントのスペースがあり、十分すぎるほどです。
私が考えることができる唯一のことは、ボタンが大きくなるのを妨げている目に見えない制約があるということです. しかし、私はそれを見ていません。私が必要とするのは、すべてがよく見えるようにするために約 10 ~ 15 ポイントです。
あなたが私に与えることができる洞察に感謝します。
更新 (回答): この非常に役立つ投稿を見つけました。を設定する必要があることがわかりましたself.okbutton.contentEdgeInsets
。そして、ボタンのタイトルを設定する前にそれを呼び出します(自動的に呼び出すようですsizeToFit:
)。問題は、カスタム ボタン (インセットが組み込まれていない) を使用していたため、自分で設定する必要があったことです。正しいプロパティを使用していませんでした。正のインセットを使用titleEdgeInsets
すると、実際にはテキストを描画できる領域が小さくなりました。これが、テキストを押しつぶしていた理由です。どうやら、テキストをインデントしようとしている場合にのみ、実際に役立つプロパティです。テキスト描画領域を小さくしないために、負のインセットを対応する反対側に渡してインデントをオフセットする必要があります。つまり、テキストを押しつぶすbutton.titleEdgeInsets = UIEdgeInsetMake(0.0, 1.0, 0.0, -1.0)
ことなく、ボタン内のテキストを右に移動します)。