ios - UIView - 什么覆盖将允许更新 UIView 框架

标签 ios swift uiview

我有一个 UIView .xib,并且正在对 UIView 进行子类化。当我加载 Nib 时,将设置 View 的框架并调用 awakeFromNib()。

我有 3 个按钮。当我加载 View 时,我为每个按钮传递回调。如果一个或多个回调为零,则我隐藏按钮并调整 View 大小:

let viewSize = 50
var adjustedSize = 0
if (self.option2String == nil){
    self.option2View.isHidden = true
    adjustedSize -= viewSize
}
if (self.option3String == nil){
    self.option3View.isHidden = true
    adjustedSize -= viewSize
}
let _size = self.innerView.frame.size
let size = CGSize(width: _size.width, height: _size.height + CGFloat(adjustedSize))
self.innerView.frame = CGRect(origin: self.innerView.frame.origin, size: size)

我尝试将此代码放入 awakeFromNib() 和 didMoveToSuperview() 中,但框架没有改变大小。

如果我将最后一行包含在 DispatchQueue.main.async 中,那么它就可以工作。但我担心这只是时间上的运气。

这是最佳实践吗?在哪里可以从 UIView 子类中调整 View 大小?

编辑:已确认,DispatchQueue.main.async 只是运气。它只有 50% 的时间有效。

最佳答案

将 View 放在 UIViewController 中,调用一个在 Controller 的 viewDidLayoutSubviews() 中调整 View 大小的函数

override func viewDidLayoutSubviews() {
   myView.resize()
}

关于ios - UIView - 什么覆盖将允许更新 UIView 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57979509/

相关文章:

ios - 从 UITableView 中排除文档

javascript - React-Native 渲染多个图像

ios - 是否可能更新等高约束?

ios - 当键盘显示一个 TextView 但没有另一个 TextView 时如何移动 View

ios - 从后台返回后 UIView 动画被阻止 ios8 (Rubymotion)

ios - 将Array的SN中的null发送到Apple Wallet是否正确?

ios - 了解 dispatch_queues 和同步/异步调度

ios - 时间格式包含冒号(:) Not supported by iOS 12. 2

ios - 无法通过 heightForRowAt 获取 TableView 中的单元格

swift - 共享扩展 : Grab thumbnail in custom view controller like SLComposeServiceViewController