Skip to content
This repository has been archived by the owner on Nov 4, 2022. It is now read-only.

Canvas breaks using ASCollectionView #218

Open
Z3r0CooLE opened this issue Jul 19, 2021 · 0 comments
Open

Canvas breaks using ASCollectionView #218

Z3r0CooLE opened this issue Jul 19, 2021 · 0 comments

Comments

@Z3r0CooLE
Copy link

Z3r0CooLE commented Jul 19, 2021

Sorry in advanced, but I'm not sure why the first line of each struct break code markdown here?

Describe the bug
I have a TabView in my main ContentView body. I have four structs that return the content view of each tab item. Two of these structs contain an ASCollectionView; the first collection has three ASCollectionViewSections and the second collection has two. The project builds fine, Xcode reports no errors in the code and the syntax highlighting is showing everything the way it should look. The app installs on emulators and physical devices with no issue. But the canvas preview fails to build and claims it can't type check the expression in reasonable time. If I replace my first ASCollectionView; the one with three ASCollectionViewSections, with a simple Text view, the canvas builds works as expected. However, if I replace the last ASCollectionView; the one only containing two ASCollectionViewSections, with a simple Text view and uncomment the first ASCollectionView, canvas still fails to build. I have replaced the entire first ASCollectionView with a copy of the one that doesn't cause Canvas to fail and I have even replaced the entire content view struct with a copy of the struct that works, changing out the data collection and item names to be used in the collection with those of the one it is replacing. I have also tried only putting two sections in it to exactly mimic the collection that works. But no matter what this one collection makes canvas fail.
Any help, guidance or info provided is greatly appreciated.

To Reproduce
Here are both of my ASCollection View structs, the item models used for the lists return an int for their position and a few strings for details about theirselves, other than one collection having 3 sections and one having 2, I don't see any differences that would result in one breaking canvas preview and one not.

`
struct OtherItemViewContent: View {
@State private var otherItemOneList = ListItem
@State private var otherItemTwoList = ListItem
@State private var otherItemThreeList = ListItem

var body: some View {
    ASCollectionView {
        ASCollectionViewSection(id: 0, data: otherItemOneList, dataID: \.self) { item, _ in
            HStack(alignment: .center) {
                VStack(alignment: .center) {
                    Text("Rank")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("#\(item.id)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 30)
                VStack(alignment: .center) {
                    Text("Name")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.itemName)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 130)
                VStack(alignment: .center){
                    Text("Pick Ratio")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.pickRatio)%")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 150)
                VStack(alignment: .center) {
                    Text("KD")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.kdRatio)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 40)
            }
            Divider()
        }
        .sectionHeader {
            Text("Items One")
                .foregroundColor(Color("color-text"))
                .padding()
        }
        ASCollectionViewSection(id: 1, data: otherItemTwoList, dataID: \.self) { item, _ in
            HStack(alignment: .center) {
                VStack(alignment: .center) {
                    Text("Rank")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("#\(item.id)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 30)
                VStack(alignment: .center) {
                    Text("Name")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.itemName)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 130)
                VStack(alignment: .center){
                    Text("Pick Ratio")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.pickRatio)%")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 150)
                VStack(alignment: .center) {
                    Text("KD")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.kdRatio)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 40)
            }
            Divider()
        }
        .sectionHeader {
            Text("Items Two")
                .foregroundColor(Color("color-text"))
                .padding()
        }
        ASCollectionViewSection(id: 2, data: otherItemThreeList, dataID: \.self) { item, _ in
            HStack(alignment: .center) {
                VStack(alignment: .center) {
                    Text("Rank")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("#\(item.id)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 30)
                VStack(alignment: .center) {
                    Text("Name")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.itemName)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 130)
                VStack(alignment: .center){
                    Text("Pick Ratio")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.pickRatio)%")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 150)
                VStack(alignment: .center) {
                    Text("KD")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.kdRatio)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 40)
            }
            Divider()
        }
        .sectionHeader {
            Text("Items Three")
                .foregroundColor(Color("color-text"))
                .padding()
        }
    }
    .layout { sectionID in
        switch sectionID {
            default:
                return .list(
                    itemSize: .absolute(50),
                    spacing: 10,
                    sectionInsets: .zero,
                    insetSupplementaries: true,
                    stickyHeader: false,
                    stickyFooter: false)
        }
    }
    .onAppear() {
        MY_API().loadOtherItemsData { (otherItemOneList, otherItemTwoList, otherItemThreeList) in
            self.otherItemOneList = otherItemOneList
            self.otherItemTwoList = otherItemTwoList
            self.otherItemThreeList = otherItemThreeList
        }
    }
}

}

struct ListItemsViewContent: View {
@State private var dataOneList = ListItem
@State private var dataTwoList = ListItem

var body: some View {
    ASCollectionView {
        ASCollectionViewSection(id: 3, data: dataOneList, dataID: \.self) { item, _ in
            HStack(alignment: .center) {
                VStack(alignment: .center) {
                    Text("Rank")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("#\(item.id)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 30)
                VStack(alignment: .center) {
                    Text("Name")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.itemName)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 130)
                VStack(alignment: .center){
                    Text("Pick Ratio")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.pickRatio)%")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 150)
                VStack(alignment: .center) {
                    Text("KD")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.kdRatio)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 40)
            }
            Divider()
        }
        .sectionHeader {
            Text("Section One")
                .foregroundColor(Color("color-text"))
                .padding()
        }
        ASCollectionViewSection(id: 4, data: dataTwoList, dataID: \.self) { item, _ in
            HStack(alignment: .center) {
                VStack(alignment: .center) {
                    Text("Rank")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("#\(item.id)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 30)
                VStack(alignment: .center) {
                    Text("Name")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.itemName)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 130)
                VStack(alignment: .center){
                    Text("Pick Ratio")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.pickRatio)%")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 150)
                VStack(alignment: .center) {
                    Text("KD")
                        .fontWeight(.bold)
                        .font(.system(size: 10))
                        .multilineTextAlignment(.center)
                    Text("\(item.kdRatio)")
                        .font(.system(size: 12))
                        .multilineTextAlignment(.center)
                }
                .frame(width: 40)
            }
            Divider()
        }
        .sectionHeader {
            Text("Section Two")
                .foregroundColor(Color("color-text"))
                .padding()
        }
    }
    .layout { sectionID in
        switch sectionID {
            default:
                return .list(
                    itemSize: .absolute(50),
                    spacing: 10,
                    sectionInsets: .zero,
                    insetSupplementaries: true,
                    stickyHeader: false,
                    stickyFooter: false)
        }
    }
    .onAppear() {
        MY_API().loadSecondItemsData { (dataOneList, dataTwoList) in
            self. dataOneList = dataOneList
            self. dataTwoList = dataTwoList
        }
    }
}

}`

Expected behaviour
Both views should work with canvas preview

Screenshots
N/A

Xcode Version:

  • Version 12.5.1 (12E507)

Simulator, Device, Both?

  • Simulator - works as expected
  • Physical Device - works as expected
  • Canvas Preview - broken
# for free to subscribe to this conversation on GitHub. Already have an account? #.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant