Xcode - размер и положение раскадровки, измененные при открытии

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

Вот как я произвожу такое поведение:

  • Я вытаскиваю приложение из репозитория git
  • Откройте затронутую раскадровку без каких-либо изменений
  • git diff уже говорит мне о различиях, например
$ git diff
...
- <rect key="frame" x="576.99999828648401" y="11" width="170" height="20"/>
+ <rect key="frame" x="577" y="11" width="170" height="20"/>
...
- <rect key="frame" x="518.99999921768904" y="7" width="228" height="30"/>
+ <rect key="frame" x="519" y="7" width="227.99999841338541" height="30"/>

Это происходит с кем-то еще?

Возникает вопрос:
Почему моя раскадровка изменяется, когда я только открываю ее, и как это предотвратить?


Уведомление:

Я понял, что это происходит только на <rect />, содержащихся в labels и textFields


person Pierre de LESPINAY    schedule 21.07.2014    source источник
comment
Удалось ли вам решить эту проблему за это время? Мы испытываем те же эффекты (Xcode 7.2).   -  person Christian    schedule 20.01.2016
comment
Я не помню, чтобы она решалась. Я просто помню, как начал максимально разбивать свои раскадровки, чтобы уменьшить вероятность конфликта слияния и облегчить его возможное разрешение. (Я использовал Xcode 4 или 5)   -  person Pierre de LESPINAY    schedule 20.01.2016
comment
Это звучит немного безумно, но, похоже, это как-то связано с тем фактом, что вы используете Xcode на внешнем дисплее с другим разрешением. Тем не менее, разделение раскадровки на более мелкие фрагменты — хорошая идея. ;-)   -  person Christian    schedule 20.01.2016
comment
Привет из 2020 года, и он стал еще более безумным и раздражающим. Просто открытие раскадровки почти гарантирует появление различий. Вы фиксируете их, затем снова открываете ту же раскадровку и видите, что небольшие сдвиги координат снова возвращаются к предыдущим значениям. Исправления, похоже, зависят от модели устройства, выбранной на данной раскадровке, т.е. будь то сетчатка 2x или 3x, изменения будут либо на 0,5, либо на 0,333... пикселя. Не могу найти средство. Кажется, никто в Apple не использует git или что-то в этом роде. Или никто в Apple не использует Xcode. Потому что трудно не заметить этот баг.   -  person mojuba    schedule 22.12.2020


Ответы (2)


Xcode сохраняет информацию о макете раскадровки в файле XML (.storyboard). Таким образом, любые изменения в раскадровке будут отражены в этом XML. Эта информация может регулярно меняться, особенно если вы работаете с товарищами по команде. Вы можете попробовать это, переместив некоторые элементы (ничего больше не меняя), а после этого запустите сравнение с вашим репозиторием git. Вы должны снова увидеть изменение в XML. Вы можете игнорировать файл раскадровки в git checkout. Но это не имело бы особого смысла, поскольку ваши товарищи по команде могли добавить новые элементы в раскадровку.

Возможно, это тоже помогает: [Xcode изменяет немодифицированную раскадровку и файлы XIB.

Если я правильно понял первый ответ, другие изменения также могут вызвать изменение XML-файла раскадровки.

с уважением Томас

person TomG    schedule 21.07.2014
comment
Я понимаю, что я говорю об изменениях, которые происходят, когда я не делаю никаких изменений в раскадровке (просто открываю ее) - person Pierre de LESPINAY; 21.07.2014
comment
Я добавил ссылку на соответствующее обсуждение. Может, тот поможет. - person TomG; 21.07.2014
comment
Спасибо за ссылку. Я это уже видел (даже прокомментировал ответ месяц назад). Моя проблема немного отличается, и на самом деле у меня нет проблем с OP. - person Pierre de LESPINAY; 21.07.2014
comment
У меня точно такая же проблема, просто открытие раскадровки приводит к изменению положения/размера представлений. Крайне раздражающий баг в IB. - person Adam Eisfeld; 20.11.2014

У меня та же проблема. Вы решили это? Как?

Это мое решение:

  1. В настоящее время я использую Xcode версии 6.1.1 (6A2008a).
  2. Я загружаю Xcode 6.3 beta 2 Build: 6D532l
  3. Открытый проект в Xcode 6.3 beta 2
  4. Xcode 6.3 beta 2 изменит раскадровку: добавьте некоторые поля и измените некоторые значения
  5. Запустите проект, чтобы проверить внешний вид приложения
  6. Закрыть проект
  7. Открыть с помощью Xcode версии 6.1.1 (6A2008a)
  8. Проверьте изменения (в моем случае Xcode Version 6.1.1 (6A2008a) не отклоняйте изменения Xcode 6.3 beta 2)
  9. Выполнить (проблема кажется решенной)
person Andrei Pachtarou    schedule 05.03.2015
comment
Привет, Андрей, добро пожаловать в Stack Overflow. Этот раздел явно зарезервирован для ответов на заданный вопрос, вопросы или вопросы по содержанию вопроса следует публиковать в виде комментариев. - person Inspector Squirrel; 05.03.2015
comment
Повторяя комментарий Сиппи. Когда у вас будет достаточно репутации, вы также можете голосовать за вопросы, на которые вы хотели бы получить ответ. - person Stephen Lake; 05.03.2015