首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >视图的Frame被调用两次并导致裁剪错误

视图的Frame被调用两次并导致裁剪错误
EN

Stack Overflow用户
提问于 2019-03-28 23:59:51
回答 2查看 36关注 0票数 0

我有一个基本的UIView,它有一个visualEffectView作为它的子视图。我将visualEffectView的视图frame.height设置为80。在向ViewController演示时,我希望将其高度重置为120。目前,当显示时,高度最初为120,但随后迅速回落到80。我的ViewController中的帧不应该覆盖UIView中设置的帧吗?我在ViewController中的帧首先被调用,但后来它被UIView调用,导致了裁剪错误。

代码语言:javascript
复制
class CardView: UIView {

let visualEffectView = UIVisualEffectView(effect: UIBlurEffect(style: .light))

override init(frame: CGRect) {
    super.init(frame: frame)
    clipsToBounds = true
    addSubview(visualEffectView)
}

override func layoutSubviews() {
    super.layoutSubviews()

    visualEffectView.anchor(top: topAnchor, left: leftAnchor, bottom: nil, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 80)

  }
}

class ViewController: ViewController {

let cardView: CardView = {
    let cv = CardView()
    cv.imageView.clipsToBounds = true
    cv.layer.cornerRadius = 18
    return cv
}()

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    let superviewFrame = view.frame.height
    cardView.frame = CGRect(x: 10, y: superviewFrame / 8, width: view.frame.width - 20, height: superviewFrame - (superviewFrame / 5))
    cardView.visualEffectView.anchor(top: cardView.topAnchor, left: cardView.leftAnchor, bottom: nil, right: cardView.rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 120)     
  }
}
EN

回答 2

Stack Overflow用户

发布于 2019-03-29 01:15:41

尝试移动此代码

visualEffectView.anchor(top: topAnchor, left: leftAnchor, bottom: nil, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 80)

override func layoutSubviews() {override init(frame: CGRect) {

super.init()之后

票数 0
EN

Stack Overflow用户

发布于 2019-03-29 04:17:43

您可能需要一个保护条件,如果有约束,只需传递即可。

代码语言:javascript
复制
    override func layoutSubviews() {
    super.layoutSubviews()

    guard visualEffectView.constraintsAffectingLayout(for: .vertical).count == 0 else  {return}. // Here

    visualEffectView.anchor(top: topAnchor, left: leftAnchor, bottom: nil, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 80)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55402037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档