0

我正在使用 Xcode 8 和 Swift 3。我正在设计 UICollectionView 并希望动态设置高度和宽度,因此需要一些答案。在我得到这个解决方案的路上(正确与否 - 我不知道):

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

    let Labell : UILabel = UILabel()
    Labell.text =   self.items[indexPath.item]
    let labelTextWidth =   Labell.intrinsicContentSize.width
    return CGSize(width: labelTextWidth + 20, height: 35)

}

但是这个答案是 swift 2.0 并且给出这个答案的人声称它已经解决了。我将它粘贴到 Xcode 中并更改了 Xcode 建议我的一些内容。

现在在这里我收到以下警告:

instance method 'collectionView:layout:sizeForItemAtIndexPath:)' nearly matches optional requirement 'collection(_:willDisplaySupplementaryView:forElement:at:)' of protocol 'UICollectionViewDelegate'

Xcode 建议我 2 个解决方案 1)在 func 关键字之前添加 private 2)在 fun 关键字之前添加 @nonobjc

我尝试了两种解决方案,它抑制了警告,但从未调用过上述任何一种。我尝试设置断点并尝试了很多方法。如果有人能把我从这个坑里拉出来。

4

1 回答 1

1

There is no sizeForItemAtIndexPath delegate method for UICollectionViewDelegate.

What you're probably looking for is

optional func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize

which can be found on the UICollectionViewDelegateFlowLayout protocol.

Try replacing your code with this:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let Labell : UILabel = UILabel()
    Labell.text =   self.items[indexPath.item]
    let labelTextWidth =   Labell.intrinsicContentSize.width
    return CGSize(width: labelTextWidth + 20, height: 35)

}
于 2017-01-17T12:58:11.667 回答