小编Pav*_*lov的帖子

带有自动调整大小的单元格的UICollectionView(estimatedSize)和sectionHeadersPinToVisibleBounds就是精神上的

考虑以下情况.我有一个UICollectionView(内部UICollectionViewController),看起来几乎一样UITableView(我不使用的原因UITalbeView是因为我在布局上有非数据视图,我不想管理和搞乱我IndexPath).为了实现我设置的自动调整单元estimatedItemSize,类似的东西:

layout.estimatedItemSize = CGSize(width: self.view.bounds.size.width, height: 72)
Run Code Online (Sandbox Code Playgroud)

另外,在我的单元格中,我有布局属性:

override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
    layoutAttributes.bounds.size.height = systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
    return layoutAttributes
}
Run Code Online (Sandbox Code Playgroud)

所以,通过这样做,我得到了UITableView与自动调整一样的精确布局.而且效果很好.

现在,我正在尝试添加标题并将其固定在滚动到该部分的顶部,如下所示:

layout.sectionHeadersPinToVisibleBounds = false
Run Code Online (Sandbox Code Playgroud)

但布局进入了奇怪的状态,我到处都有毛刺,细胞相互重叠,标题有时不会粘住.

更新:

视图控制器和单元的代码:

class ViewController: UICollectionViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    let layout = collectionView?.collectionViewLayout as! UICollectionViewFlowLayout
    layout.sectionHeadersPinToVisibleBounds = true
    layout.estimatedItemSize = CGSize(width: collectionView?.bounds.size.width ?? 0, height: 36) // enables dynamic height
}

override func numberOfSections(in collectionView: UICollectionView) …
Run Code Online (Sandbox Code Playgroud)

iphone xcode ios uicollectionview swift

11
推荐指数
1
解决办法
2939
查看次数

Core Data 和 SwiftUI 多态问题

将 SwiftUI 和泛型类型放在一起处理核心数据时遇到了麻烦。

考虑以下示例:

在此处输入图片说明

Parent是抽象的。FooBarParent他们的孩子,他们有一些自定义属性。

现在我想做的,大致是:

protocol EntityWithView {
    associatedtype T: View
    func buildView() -> T
}

extension Parent: EntityWithView {
    func buildView() -> some View {
        fatalError("Re-implement in child")
    }
}

extension Foo {
    override func buildView() -> some View {
        return Text(footribute)
    }
}

extension Bar {
    override func buildView() -> some View {
        return Text(atrribar)
    }
}

struct ViewThatUsesCoreDataAsModel: View {
    let entities: [Parent]

    var body: some View {
        ForEach(entities) …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

7
推荐指数
1
解决办法
237
查看次数

具有方法返回类型 View 的协议

我试图在 swiftui 中构建视图时实现一些多态性:

像这样的东西:

protocol Builder {
    func viewForItem() -> View
}

extension ItemPhoto: Builder {
    public func viewForItem() -> View {
        Image("image.png")
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Protocol 'View' can only be used as a generic constraint because it has Self or associated type requirements
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用associatedtype我有以下问题

protocol Builder {
    associatedtype T
    func viewForItem() -> T
}


extension ItemPhoto: Builder {
    typealias T = Image

    public func viewForItem() -> Image {
        Image("image.png").scaledToFit()
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我想做任何视图构建,我会收到错误

Cannot convert return expression of …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

1
推荐指数
1
解决办法
972
查看次数

标签 统计

swift ×3

ios ×2

swiftui ×2

iphone ×1

uicollectionview ×1

xcode ×1