【问题标题】:UIView get width/height without UIViewControllerUIView 在没有 UIViewController 的情况下获取宽度/高度
【发布时间】:2017-07-05 23:28:38
【问题描述】:

我有这个:

class SheetView: UIView {

  override init(frame: CGRect) {
    super.init(frame: frame)

    RCTLogInfo("SHEET VIEW INIT'ED")
    let width = String(format:"%.3f", Double(self.frame.size.width));
    let height = String(format:"%.3f", Double(self.frame.size.height));
    RCTLogInfo("Width: " + width + ", Height: " + height);

  }

  required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }

}

但是宽度和高度始终为 0。在这里阅读 Access UIView width at runtime 似乎我需要 viewDidLayoutSubviews 但 UIView 似乎没有这个。我必须使用UIViewController 才能使用viewDidLayoutSubviews,但是我无法从UIView 更改,因为使用此组件的位置需要UIView:

class SheetViewManager : RCTViewManager {

  override func view() -> UIView! {
    return SheetView();
  }

}

有没有办法只在UIView 中获得高度/宽度?​​

【问题讨论】:

  • 如果你想让它有一个非零的名声,你必须将一个帧传递给init(frame:)。
  • @Noitidart 不,你没有。你打电话给SheetView(),而不是SheetView(frame: someNonZeroFrame)。
  • 仅供参考 - 在 Swift 中您不需要任何这些分号。
  • 并将view() 函数的返回值从UIView! 更改为UIView。避免不必要地使用!。

标签: ios swift uiview


【解决方案1】:

是的,你当然可以。试试这个 。 (斯威夫特 3.0)

override func layoutSubviews() {
   super.layoutSubviews()
  print(self.frame)
}

确保您知道,如果您的自定义视图的超级视图没有通过框架设置或通过情节提要的自动布局或以编程方式为您的自定义视图提供框架,那么您的框架将保持在 0 宽度和 0 高度

【讨论】:

  • 天哪,太完美了!谢谢你,先生!我实际上对 Swift 很陌生,非常感谢您的帮助。我的观点是 React Native 中的一个观点。所以它有一个从 javascript 设置的尺寸,我需要以响应方式在另一端访问它。这也触发了纵向到横向的转换。高超!再次感谢先生!
猜你喜欢
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多