【发布时间】: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。避免不必要地使用!。 -