先做层级,再做地位:

另一思路,是指定视图的 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()