2017-11-16 8 views
1

スナップキットを使用して、下の図のバーのようにビュー間で同じ間隔(firstSubview.leftとlastSubview.rightのスーパービュー)を実現するにはどうすればよいですか?スタックビューなど)?SnapKitを使用した複数のビューの等間隔スペース

enter image description here

ありがとう!あなたは

+0

代わりにstackViewを使用しますか? – Tj3n

+0

私が書いたように、スナップショットとスタックビューだけのオプションはありますか? – Pascal

+0

それぞれをビューに追加し、幅を均等に設定してから行うことができます – Tj3n

答えて

2

にしたくないか、あなたはスーパーに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) 
      }) 
     } 
    } 
} 

ここでの唯一の「魔法」 lineViewscenterXの乗数の計算方法は次のとおりです。8個あるときは、その間に9つのスペースがあります(containerViewの左右のエッジと最初と最後の間のスペースを数えます)。lineViewです。

lineView配置するには2を乗じたS centerX制約「containerViewの右端にS centerXを、あなたはcontainerViewにそのcenterX制約を設定しなければならない」(あなたはそれを行うにはしたくないが、あなたは必要としますその計算のための値)。

ここで、各ラインビューの乗数を得るには、lineViewsの数に1を加えた数で2を除算します(lineViewsを持つよりももう1つスペースがあることに注意してください)。次のように、あなたは(8 lineViewsため乗数2/9 = 0.2222である)lineViewscenterX制約を設定:

(擬似コード)
lineView 1:(1 * 0.2222を乗じcenterX = containerView.centerX )
lineView 2:centerX = containerView.centerX * 0.2222(2)
を掛けlineView 3:centerX = containerView.centerX * 0.2222(3)
を掛けなど

あなたにこれを与える:

enter image description here

関連する問題