考虑以下情况.我有一个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) 将 SwiftUI 和泛型类型放在一起处理核心数据时遇到了麻烦。
考虑以下示例:
Parent是抽象的。Foo和Bar是Parent他们的孩子,他们有一些自定义属性。
现在我想做的,大致是:
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) 我试图在 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)