ios - View 的 Frame 被调用两次并导致剪辑错误
问题描述
我有一个基本的 UIView,它有一个 visualEffectView 作为它的子视图。我将 visualEffectView 的视图 frame.height 设置为 80。当呈现给 ViewController 时,我想将其高度重置为 120。目前,当呈现时,高度最初是 120,但随后迅速回落到 80。我的框架不应该在我的 ViewController 会覆盖 UIView 中设置的框架吗?我在 ViewController 中的框架首先被调用,但后来它被 UIView 调用,导致剪辑错误。
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)
}
}
解决方案
try moving this code
visualEffectView.anchor(top: topAnchor, left: leftAnchor, bottom: nil, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 80)
from override func layoutSubviews() {
to override init(frame: CGRect) {
after super.init()
推荐阅读
- node.js - Mocha:功能正常的端点超时
- fongo - 无法加载 java /VM 库 C:\Program Files(x86)Freephoneline\bin\server\jvm.dll
- session - 当控制器使用会话本身并在 OnGet 上调用方法时返回 null
- c# - SQL Server 与 Visual Studio 的不同行为
- c - 需要帮助在 C 中使用函数实现 kittycat 函数
- html - 更改 Mermaid.render 生成的 SVG 的大小?
- angular - 如何仅在通过 Angular Resolver 加载数据时渲染组件
- python - Unable to locate element: {"method":"xpath","selector":"/html/body/div/div[2]/div[3]/div[2]/button"}
- python - 所以我刚刚创建了一个文本文件并使用 with 循环从现有文件中复制了文本。如何在同一个 prog 中打开新创建的文件?
- javascript - 如何使用 Intersection Observer 而不是 window.onscroll?