Draw (_ rect: CGRect) не рисует выше определенного размера - PullRequest
0 голосов
/ 14 июня 2019

У меня есть собственный подкласс UIView внутри UIScrollView, который (помимо прочего) переопределяет

override var intrinsicContentSize: CGSize {
    get {
        ...
    }
}

и (минимальный пример):

override func draw(_ rect: CGRect) {
    print(rect)
    UIColor.white.set() // it has a dark background
    UIBezierPath(rect: CGRect(x: 100, y: 100, width: 10, height: 10)).stroke()
}

Рисование отлично работает для «меньших» размеров вида, но выше определенного предела ничто больше не рисует.

Выдает штраф за туры

(0.0, 0.0, 79.5, 7458.5)
(0.0, 0.0, 228.5, 7458.5)
(0.0, 0.0, 149.0, 7738.0)
(0.0, 0.0, 429.0, 7738.0)

Но терпит неудачу за права

(0.0, 0.0, 89.5, 8381.0)
(0.0, 0.0, 257.0, 8381.0)

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

Это происходит в моделируемом iPad 5-го поколения и моделируемом iPad Pro 9,7 ".

1 Ответ

0 голосов
/ 18 июня 2019

Проблема в том, что draw предназначен только для нестандартного рисунка для небольших видов, а не для больших холстов.Однако я думаю, что эта точка отказа должна быть где-то задокументирована.Увеличение холста еще больше приведет к предупреждению ignoring bogus layer size.

Чтобы решить эту проблему, следует рассмотреть вопрос

  • , не использующий draw
  • с использованием UITableView или UICollectionView для загрузки и выгрузки огромного слоя по крупицам.
...