Прежде всего, я хочу подтвердить, что с использованием фрейма намного быстрее, чем автоматическая разметка (~ 10 раз, насколько я знаю).Вот почему другой сказал вам использовать рамку вместо автоматической разметки.В то время как у @RakeshaShastri был хороший ответ, объясняющий, почему мы должны использовать автоматическую разметку, мой ответ будет говорить о том, когда следует использовать рамку вместо автоматической разметки.
- При отображении обычного вида, например
UIView
, UIButton
, UILabel
... на контроллере вида вы можете использовать автоматическую разметку.Разница между использованием фрейма и автоматической разметкой тривиальна. - С
UICollectionViewCell
и UITableViewCell
вы должны использовать фрейм.В этом случае существует большая разница в производительности между фреймом и автоматическим макетом.
Давайте посмотрим на сравнительный тест ниже, чтобы сравнить их.
Снимок сделан с LayoutFrameworkBenchmark .Он показывает производительность при компоновке 100 ячеек UICollectionView
Как видно, автоматическое расположение занимает гораздо больше времени, чем ручное расположение, а не автоматическое расположение (~ 15раз).Разница будет влиять на то, насколько гладким будет ваше представление коллекции, когда оно прокручивается.
Особенно, когда ваша ячейка имеет тяжелую иерархию представлений, автоматическое размещение займет много времени, чтобы вычислить позиции базы подпредставлений ячейки по ограничениям с лишними вычислениями.Это может сделать представление коллекции или представление таблицы отставая при прокрутке.Использование фрейма здесь очень удобно, чтобы максимально сократить излишние вычисления и помочь нам сэкономить время для других задач.
Выводы:
Будьте осторожны при использованииавтоматическое расположение на UICollectionViewCell
, UITableViewCell
.Если во время прокрутки представление коллекции или таблицы не является плавным, возможно, причиной этого является автоматическое расположение.
Используйте фрейм только в случае возникновения проблем с автоматическим размещением.Производительность, полученная от использования фрейма в обычном случае, тривиальна.