2017-01-17 4 views
0

Я использую Xcode 8 и Swift 3. Я разрабатывал UICollectionView и хотел динамически устанавливать высоту и ширину так, чтобы их можно было получить для некоторых ответов. По пути я получил это решение (правильно или нет - я понятия не имею):Swift 3 Предупреждение в UICollectionViewDelegate

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) 

} 

Но этот ответ был быстрым 2,0 А человек, который дал этот ответ утверждает, что она решается один. Я вставил его в Xcode и изменил то, что предложил Xcode.

Теперь здесь я получаю следующее предупреждение:

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

Xcode предлагает мне 2 решение 1) добавить частное впереди Func ключевого слова 2) добавить @nonobjc перед забавным ключевым словом

Я попытался оба решения, и он подавляет предупреждение, но ни одно из вышеизложенных никогда не называется. Я попытался поставить точку останова и много раз пробовал. Если кто-то может вытащить меня из этой ямы.

+0

я получил этот метод функ CollectionView (_ CollectionView: UICollectionView, расположение collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { } –

+0

HTTPS://medium.com/@zonble/your-delegation-methods-might-not-be-called-in-swift-3-c6065ed7b4cd#.hjsujieml см. это –

ответ

1

sizeForItemAtIndexPath метод делегирования для UICollectionViewDelegate.

То, что вы, вероятно, ищет это

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

, который можно найти на протоколе UICollectionViewDelegateFlowLayout.

Попробуйте заменить свой код с этим:

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) 

} 
+0

Спасибо @masttsson –

Смежные вопросы