Post not yet marked as solved
https://developer.apple.com/documentation/swiftui/view/scrollcontentbackground(_:)-8wrn2?changes=latest_beta
Post not yet marked as solved
The approach presented above does not work reliably as the UICollectionViewListLayoutSectionBackgroundColorDecorationView will be re-rendered regardless and independently of the section content. Then the view modification will not be applied.
Post not yet marked as solved
FYI: FB10225556 is my radar regarding this issue.
Post not yet marked as solved
It is a real pity. With the (understandable) departure of UITableView, an extremely large number of hacks that were in active use to use SwiftUI for productive apps break.
Post not yet marked as solved
With SwiftUI Apple switch from UITableView to a custom implemtation based on UICollectionView. Thus all known workaround do not work anymore. Please file a Radar.
Post not yet marked as solved
FYI: We found a way using Introspect (not sure if in any way legal). However, as Apple Engineers noted, we should not rely on implementation details of a framework. Unfortunately, we are now in the stupid situation of having done exactly that in the past and now having to find a workaround. Otherwise our app looks extremely broken...
extension View {
@warn_unqualified_access
@ViewBuilder
func listBackgroundColor(_ color: Color) -> some View {
introspectViewController { inspectSubView($0.view, backgroundColor: .init(color)) }
}
// MARK: Helper
private func inspectSubView(_ view: UIView, backgroundColor: UIColor) {
for subview in view.subviews {
if NSStringFromClass(type(of: subview)).contains("UICollectionViewListLayoutSectionBackgroundColorDecorationView") {
subview.backgroundColor = backgroundColor
return
}
inspectSubView(subview, backgroundColor: backgroundColor)
}
}
}
Post not yet marked as solved
I think Vlad wants to change the whole background not of some cells.
We found a way using Introspect.
However, we are not sure if this is in any way "legal".
extension View {
@warn_unqualified_access
@ViewBuilder
func listBackgroundColor(_ color: Color) -> some View {
introspectViewController { inspectSubView($0.view, backgroundColor: .init(color)) }
}
// MARK: Helper
private func inspectSubView(_ view: UIView, backgroundColor: UIColor) {
for subview in view.subviews {
if NSStringFromClass(type(of: subview)).contains("UICollectionViewListLayoutSectionBackgroundColorDecorationView") {
subview.backgroundColor = backgroundColor
return
}
inspectSubView(subview, backgroundColor: backgroundColor)
}
}
}
Post not yet marked as solved
Found this note in the lounge:
In general, you should not rely on implementation details of a framework (including SwiftUI) to achieve specific behaviors in your apps. The release notes did call out the change in implementation of List since we were aware of developers using UIKit methods to style their Lists in the past. This is a known limitation, but we realize this is a popular request, so rest assured we have noted the feedback here and in the SwiftUI lounge!
Hmm.
Post not yet marked as solved
Having the same issue with CocoaMQTT.
https://github.com/emqx/CocoaMQTT/blob/8be5c863b1f6adca4ce2212085d7473aa9e599f9/Source/CocoaMQTTTypes.swift#L66
Any update on this issue?