gpt4 book ai didi

ios - 自定义 UIView 重绘 View Controller

转载 作者:行者123 更新时间:2023-11-30 11:08:27 25 4
gpt4 key购买 nike

我的第一篇文章,所以我希望我做的是正确的事情。

我有一个自定义 UIView,其中包含一组自定义 UIButton。

我已经重写了 func draw(_ rect: CGRect) ,它具有以下代码:

  override func draw(_ rect: CGRect) {

// remove all buttons currently on the bar
self.subviews.forEach { $0.removeFromSuperview() }

// process all buttons that are not hidden
var i = 0
for btn in buttons {
if !btn.button.isHidden {
self.addSubview(btn.button)

// set constraints with SnapKit
btn.button.snp.makeConstraints { (c) in
c.size.equalTo(buttonSize)
c.left.equalToSuperview().offset(padding.width + (isVertical ? 0 : (i * buttonSize.width)))
c.top.equalToSuperview().offset(padding.height + (isVertical ? (i * buttonSize.height) : 0))
}

i += 1
}
}

// set button bar's constraints
snp.updateConstraints { (c) in
if isVertical {
c.height.equalTo(max(visibleCount, 1) * buttonSize.height + 2 * padding.height)
} else {
c.width.equalTo(max(visibleCount, 1) * buttonSize.width + 2 * padding.width)
}
}

}

每当我执行 setNeedsLayout() 时,它都会按预期执行,但它也会将 UIImage 置于同一 super View 中。

这会导致问题,因为 UIImage 可以平移并且重新居中不是预期的行为。

我通过注释不同的部分测试了上面的代码,发现正是当它定位按钮本身时才会导致这种行为。

当然,这不是我想要的行为。

非常欢迎任何帮助/想法/建议。

ViewController中 subview 添加的顺序是...

  private func setupViews() {
view.backgroundColor = .green

view.addSubview(mapDisplay)
view.addSubview(contextMenu)
view.addSubview(FloatingMenu)

}

最佳答案

在拆开代码后,我自己解决了这个问题。

事实证明,我有一个空的约束占位符用于相关的 UIImageView,并且 SnapKit 将一个空的约束作为显式指令来“删除”所有约束,并在其他调用时将有问题的项目重置回“零”更新。

我认为这种行为是错误的,因为我的 UIView 是 View Controller 中的同级 subview ,但是它确实存在......所以做类似的事情

mapDisplay.snp.makeConstraints { (c) 中

}

当 UIView 更新按钮位置时,由于某种原因,会使 UIImageView (mapDisplay) 快速回到屏幕中心。

我想应该将其发布到他们的 gitHub 上。

关于ios - 自定义 UIView 重绘 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52454856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com