【发布时间】:2020-12-09 12:37:12
【问题描述】:
我有一个带有子视图的模态视图,它本身有另一个子视图。当我旋转设备时,需要重绘第一个子视图以将新的 GeometricReader 数据传递给最后一个子视图。
我正在通过视图模型中的通知中心检测旋转
@objc func updateView(_ : Notification) {
self.refresh.toggle()
self.objectWillChange.send()
}
视图模型有两个属性。
@Published var objectWillChange = ObservableObjectPublisher()
@Published var refresh: Bool
在视图中我有一个@observedObject vm,但是当 vm 更改时,视图不会重绘。对于一些需要重新对齐的线条图,第一个孩子需要重绘以将其大小发送给第二个孩子。
[编辑]
struct StackView: View {
@ObservedObject var vm = ViewModel()
var body: some View {
Color.white
VStack {
Spacer()
VStack {
Text("Hello StackView")
View2()
}
}
}
}
extension StackView {
final class ViewModel: ObservableObject {
init() {
NotificationCenter.default.addObserver(self, selector: #selector(updateView(_:)), name: UIDevice.orientationDidChangeNotification, object: nil)
}
deinit {
NotificationCenter.default.removeObserver(self, name: UIDevice.orientationDidChangeNotification, object: nil)
}
@objc func updateView(_ notification: Notification) {
self.objectWillChange.send()
}
}
}
struct View2: View {
var body: some View {
Text("Hello view 2")
.overlay(GeometryReader { geo in
Color.clear
.onAppear {
print(geo.frame(in: .global))
}
})
}
}
【问题讨论】:
-
我根本看不出该通知使用的任何原因。目标是什么 - 布局会在旋转时自动更新?
-
如你所说,旋转得到照顾,但我需要让 view2 重绘。该视图上有连接到图像的线,当它们由于旋转而移动时,它们需要获取更新的值。
标签: swiftui