先做层级,再做地位:
另一思路,是指定视图的 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()