スナップキットを使用して、下の図のバーのようにビュー間で同じ間隔(firstSubview.leftとlastSubview.rightのスーパービュー)を実現するにはどうすればよいですか?スタックビューなど)?SnapKitを使用した複数のビューの等間隔スペース
ありがとう!あなたは
スナップキットを使用して、下の図のバーのようにビュー間で同じ間隔(firstSubview.leftとlastSubview.rightのスーパービュー)を実現するにはどうすればよいですか?スタックビューなど)?SnapKitを使用した複数のビューの等間隔スペース
ありがとう!あなたは
にしたくないか、あなたはスーパーにcenterX制約を設定することにより、同じレイアウトを実現し、各サブビューに異なる乗数を追加することができUIStackView
を使用できない場合:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .gray
let containerView = UIView()
containerView.backgroundColor = .lightGray
view.addSubview(containerView)
let numberOfLines = 8
for _ in 0..<numberOfLines {
let lineView = UIView()
lineView.backgroundColor = .cyan
containerView.addSubview(lineView)
}
containerView.snp.makeConstraints { (make) in
make.top.equalTo(60)
make.left.equalTo(20)
make.right.equalTo(-20)
make.height.equalTo(150)
}
let centerXFactor: CGFloat = 2/CGFloat(containerView.subviews.count + 1)
containerView.subviews.enumerated().forEach { (index, lineView) in
lineView.snp.makeConstraints({ (make) in
make.top.bottom.equalTo(0)
make.width.equalTo(4)
make.centerX.equalTo(containerView).multipliedBy(CGFloat(index + 1) * centerXFactor)
})
}
}
}
ここでの唯一の「魔法」 lineViews
centerX
の乗数の計算方法は次のとおりです。8個あるときは、その間に9つのスペースがあります(containerView
の左右のエッジと最初と最後の間のスペースを数えます)。lineView
です。
lineView
配置するには2を乗じたS centerX
制約「containerView
の右端にS centerX
を、あなたはcontainerView
にそのcenterX
制約を設定しなければならない」(あなたはそれを行うにはしたくないが、あなたは必要としますその計算のための値)。
ここで、各ラインビューの乗数を得るには、lineViewsの数に1を加えた数で2を除算します(lineViewsを持つよりももう1つスペースがあることに注意してください)。次のように、あなたは(8 lineViews
ため乗数2/9 = 0.2222である)lineViews
にcenterX
制約を設定:
(擬似コード)
lineView 1:(1 * 0.2222を乗じcenterX = containerView.centerX )
lineView 2:centerX = containerView.centerX * 0.2222(2)
を掛けlineView 3:centerX = containerView.centerX * 0.2222(3)
を掛けなど
あなたにこれを与える:
代わりにstackViewを使用しますか? – Tj3n
私が書いたように、スナップショットとスタックビューだけのオプションはありますか? – Pascal
それぞれをビューに追加し、幅を均等に設定してから行うことができます – Tj3n