关于ios:iOS-视图布局原则

7次阅读

共计 2971 个字符,预计需要花费 8 分钟才能阅读完成。

先做层级,再做地位:

另一思路,是指定视图的 zIndex

func forUI(){
        // 档次关系,很重要。不好改的
        view.addSubs([ playingV, tShowD, contentHan,
                       progressV, bottomBoard, panelG
                      ])
        if calData.isFromStd{view.addSubs([editX_bt, progressChoosePop])
        }
        layout_h()
        h.addSubs([rhsMostMenuBtn, downloadB])
        
        if calData.isFromStd{tShowD.addSubs([vertBar])
        }
        
        view.addSubs([darkCurtain, donePop,
                      lhsPopViewSpacing, rhsPopViewTimes, speedSelectIdxV])
        
        v.addSubs([resultPop])
        
        let topRhsWidget: (ConstraintMaker) -> Void = { m in
            m.size.equalTo(CGSize(width: 32, height: 32))
            m.trailing.equalToSuperview().offset(-16)
            m.centerY.equalTo(self.h.arrow)
        }
        
        if calData.isFromStd{vertBar.snp.makeConstraints { (m) in
                m.size.equalTo(CGSize(width: 8, height: 16))
                m.leading.equalToSuperview().offset(16)
                m.top.equalToSuperview().offset(24)
            }
            editX_bt.snp.makeConstraints{(m) in
                m.leading.equalToSuperview().offset(16)
                m.trailing.equalToSuperview().offset(-16)
                m.top.equalTo(h.snp.bottom).offset(16)
                m.height.equalTo(40)
            }
            tShowD.snp.makeConstraints{(m) in
                m.leading.trailing.equalToSuperview()
                m.top.equalTo(editX_bt.snp.bottom)
                m.bottom.equalTo(bottomBoard.snp.top)
            }
            rhsMostMenuBtn.snp.makeConstraints(topRhsWidget)
            downloadB.snp.makeConstraints {(m) in
                m.size.equalTo(CGSize(width: 32, height: 32))
                m.centerY.equalTo(h.arrow)
                m.trailing.equalTo(rhsMostMenuBtn.snp.leading).offset(-16)
            }
        }
        else{tShowD.snp.makeConstraints { (m) in
                m.leading.trailing.equalToSuperview()
                m.top.equalTo(h.snp.bottom)
                m.bottom.equalTo(bottomBoard.snp.top)
            }
            downloadB.snp.makeConstraints(topRhsWidget)
        }
        playingV.snp.makeConstraints {(m) in
            m.leading.trailing.equalToSuperview()
            m.top.equalTo(h.snp.bottom)
            m.bottom.equalTo(progressV.snp.top)
        }
        panelG.snp.makeConstraints {(m) in
            m.leading.trailing.equalToSuperview()
            m.height.equalTo(panelG.h)
            self.constraintA.bottomPanelG = m.bottom.equalTo(progressV.snp.top)
        }
        bottomBoard.snp.makeConstraints {(m) in
            m.leading.trailing.equalToSuperview()
            m.height.equalTo(bottomBoard.heightStd)
            m.bottom.equalToSuperview()}
        
        progressV.snp.makeConstraints {(m) in
            m.leading.trailing.equalToSuperview()
            m.height.equalTo(progressV.h)
            m.bottom.equalTo(bottomBoard.snp.top)
        }
       resultPop.snp.makeConstraints {(m) in
           m.size.equalTo(resultPop.size)
           m.center.equalToSuperview()}
        
       donePop.snp.makeConstraints {(m) in
           m.size.equalTo(donePop.size)
           m.center.equalToSuperview()}
       
       darkCurtain.snp.makeConstraints {(m) in
           m.edges.equalToSuperview()}
        if calData.isFromStd{progressChoosePop.snp.makeConstraints { (m) in
                m.leading.trailing.equalToSuperview()
                constraintA.bottomChoosePop = m.bottom.equalTo(h)
                constraintA.heightChangeChoosePop = m.height.equalTo(self.progressChoosePop.popH)
            }
        }
        
        lhsPopViewSpacing.snp.makeConstraints {(m) in
            m.leading.trailing.equalToSuperview()
            m.height.equalTo(150 + UI.std.bottomOffsetY)
            m.bottom.equalToSuperview()}
        
        rhsPopViewTimes.snp.makeConstraints {(m) in
            m.leading.trailing.equalToSuperview()
            m.height.equalTo(160 + UI.std.bottomOffsetY)
            m.bottom.equalToSuperview()}
        
        speedSelectIdxV.snp.makeConstraints {(m) in
            m.leading.trailing.equalToSuperview()
            m.height.equalTo(150 + UI.std.bottomOffsetY)
            m.bottom.equalToSuperview()}
        view.layoutIfNeeded()}

不会呈现奇怪的动画

 view.layoutIfNeeded()
正文完
 0