Как изменить размер других подпредставлений, и родитель просматривают, когда один размер подпредставления изменяется

Только для давания Вам общее представление о скорости я выполнил четыре версии этого:

  1. Используя Наборы, как предложение Ryan.
  2. Используя Массив, немного больше, чем необходимый, затем делая uniq! в конце.
  3. Используя Хеш, как предложенный Kyle.
  4. Создание Массива необходимого размера, затем сортируя его случайным образом, как предложение Кента (но без постороннего "-0.5", который ничего не делает).

Они все быстры в мелких масштабах, таким образом, у меня были они, каждый создает список 1 000 000 чисел. Вот времена в секундах:

  1. Наборы: 628
  2. Массив + uniq: 629
  3. Хеш: 645
  4. зафиксированный Массив + вид: 8

И не, тот последний не является опечаткой. Таким образом, если Вы заботитесь о скорости, и для чисел нормально быть целыми числами от 0 до того, чем, тогда был мой точный код:

a = (0...1000000).sort_by{rand}
5
задан 3 October 2009 в 12:59
поделиться

1 ответ

При изменении размера вложенного представления вызовите [[собственный супервизор] setNeedsLayout] . В вашем супервизоре реализуйте -layoutSubviews , чтобы сделать фактический макет. Придется все рассчитывать самостоятельно. Фиксированные / гибкие поля важны для изменения размера супервизора, а не для одноранговых представлений. По умолчанию -layoutSubviews вообще ничего не делает; он просто вызывается в подходящее время.

Если вам нужно принудительно выполнить макет в определенной точке, вы можете вызвать -layoutIfNeeded для себя или своего супервизора. Прочтите документацию о том, как работает этот метод. Вообще говоря, вам не нужно это называть. Обычно он вызывается в подходящее время, если вы просто используете -setNeedsLayout .

7
ответ дан 14 December 2019 в 08:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: