[解決済み] UIStackViewの表示間隔を変更するには?
質問
私は、シンプルな横型の
UIStackView
の中にいくつかの UIViews が積み重ねられています。 私の目標は、ビュー間の可変間隔を作成することです。 私は、"spacing"プロパティを使用してサブビューの間に一定のスペースを作成できることをよく理解しています。 しかし、私の目標は、可変スペースを作成することです。 可能な限り、スペーサーとして機能する不可視のビューを使用することは避けたいと考えていることに注意してください。
私が思いついた最良の方法は、私の
UIViews
を別の
UIStackView
を使用し
layoutMarginsRelativeArrangement = YES
を使用して、内部スタックのレイアウトマージンを尊重します。 私は、同様のことを任意の
UIView
で同じようなことができればと思っていました。 以下は私のサンプル コードです。
// Create stack view
UIStackView *stackView = [[UIStackView alloc] init];
stackView.translatesAutoresizingMaskIntoConstraints = NO;
stackView.axis = UILayoutConstraintAxisHorizontal;
stackView.alignment = UIStackViewAlignmentCenter;
stackView.layoutMarginsRelativeArrangement = YES;
// Create subview
UIView *view1 = [[UIView alloc] init];
view1.translatesAutoresizingMaskIntoConstraints = NO;
// ... Add Auto Layout constraints for height / width
// ...
// I was hoping the layoutMargins would be respected, but they are not
view1.layoutMargins = UIEdgeInsetsMake(0, 25, 0, 0);
// ... Create more subviews
// UIView view2 = [[UIView alloc] init];
// ...
// Stack the subviews
[stackView addArrangedSubview:view1];
[stackView addArrangedSubview:view2];
結果は、間隔をあけてすぐ隣にビューがあるスタックになります。
どのように解決するのですか?
iOS 11のアップデートで、StackViewsにカスタムスペーシングが追加されました。
Apple は、iOS 11 でカスタムスペーシングを設定する機能を追加しました。 配置された各サブビューの後に間隔を指定するだけです。 残念ながら、前に間隔を指定することはできません。
stackView.setCustomSpacing(10.0, after: firstLabel)
stackView.setCustomSpacing(10.0, after: secondLabel)
それでも、独自のビューを使うよりはずっと良い。
iOS10以下の場合
スタックビューに透明なビューを追加して、それらに幅の制約を追加するだけでよいでしょう。
(ラベル - UIView - ラベル - UIView -Label)
で、もし
distribution
を埋めるようにすれば、UIViewsに可変幅の制約を設定することができます。
しかし、私はこれが正しい状況であれば、スタックビューを使用することを検討します。 Autolayoutを使用すると、ビュー間で可変幅を設定するのが非常に簡単になります。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン