У меня есть представление в SwiftUI, которое я встроил в UITableViewCell (в земле UIKit). Подписка / привязка et c работает (поскольку я вижу операторы печати в ячейке таблицы против подписки), но в моем представлении SwiftUI изображение не переворачивается при переключении флага. Любая идея, почему?
public class CollapsableSectionViewModel: ObservableObject {
@Published var isExpanded = true
public init(isExpanded: Bool = true) {
self.isExpanded = isExpanded
}
}
public struct CollapsableTableSectionContentView: View {
@Binding var sectionModel: CollapsableSectionViewModel
public init(sectionModel: Binding<CollapsableSectionViewModel>) {
self._sectionModel = sectionModel
}
public var body: some View {
Button(action: {
withAnimation {
self.sectionModel.isExpanded.toggle()
}
}) {
Image(systemName: "chevron.right")
.font(.caption)
.foregroundColor(Color(.white))
.frame(minWidth: 16, minHeight: 16)
.rotationEffect(.init(degrees: self.sectionModel.isExpanded ? 90 : 180))
.padding(.trailing, 16)
}
.frame(minHeight: 44)
}
}
И в UIKit:
...
let model = CollapsableSectionViewModel(isExpanded: true)
innerHostedView = UIHostingController(rootView: CollapsableTableSectionContentView(sectionModel: .constant(model)))
innerHostedView.view.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(innerHostedView.view)
innerHostedView.view.backgroundColor = .clear
NSLayoutConstraint.activate([
innerHostedView.view.topAnchor.constraint(equalTo: self.contentView.topAnchor),
innerHostedView.view.bottomAnchor.constraint(equalTo: self.contentView.bottomAnchor),
innerHostedView.view.leadingAnchor.constraint(equalTo: self.contentView.safeAreaLayoutGuide.leadingAnchor),
innerHostedView.view.trailingAnchor.constraint(equalTo: self.contentView.safeAreaLayoutGuide.trailingAnchor)
])
expansionSubscription = innerHostedView.rootView.sectionModel.$isExpanded.sink { (expanded) in
print("Expanded: \(expanded)")
}
...
Expanded: true
и Expanded: false
печатаются на консоли, когда я нажимаю на кнопку, но изображение Chevron делает не изменять Как будто привязка не работает глубже в иерархии SwiftUI View.