2015-07-01 6 views
0

Для приложения iOS, над которым я сейчас работаю, мне нужно управлять элементами управления, отображаемыми на экране, в зависимости от типа устройства, на котором работает приложение.iOS Layout - Какое лучшее решение?

Я попытаюсь объяснить с помощью теоретического примера (фактические цифры, используемые ниже, не важны, меня интересует лучший способ достижения желаемого результата).

Пример:

enter image description here enter image description here

В случае приложения в скриншотах, кнопка, которая перекрывает UIImageView не должны отображаться на всех или отображаться в другом месте на экране.

До сих пор я работал с автозапуском, но из того, что я мог понять, нет способа сказать xcode что-то вроде: hey, для класса «Compact Width/Compact Height», я хочу, чтобы вы спрятались эти кнопки ... но покажите их для «Обычная ширина/компактная высота».

Я также сделал несколько поисковых запросов и увидел, что некоторые люди говорят об использовании разных раскадровки на основе устройства; Я также думаю, что я мог бы добавлять/удалять кнопки динамически на основе типа устройства, но я думаю, что не так приятно добавлять все ограничения вручную (программно это).

Поэтому, чтобы возобновить, я был бы признателен за предложение «наилучшего» способа сделать это, лучше всего использовать комбинацию «не так сложно» + «не так долго». Кроме того, будет оценен некоторый пример кода (или ссылки).

Спасибо вам заранее!

+0

Почему бы не просто сделать кнопки термоусадочные если они будут перекрывать изображение? – dan

+0

Его идея, но я не думаю, что она работает хорошо, если у меня больше, чем одна кнопка перекрывается. Возможно, я не использую лучшие практики, желая, чтобы кнопки имели фиксированные размеры. – eemerge

+1

Вы можете сказать Xcode 'hey, для размера класса« Compact Width/Compact Height », я хочу, чтобы вы спрятали эти кнопки ... но покажите их для« Regular Width/Compact Height »'. В классе размеров вы можете выбрать, появляются ли объекты интерфейса или нет, используя флажок «установлен» в Инспекторе атрибутов. Это то, что вы ищите? Я неправильно понял ваше требование? –

ответ

0

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

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

То, что я думаю, что очень удобно:

Используйте один Раскадровка (или несколько, но для разных частей вами приложения, а не параллельные из них), а затем положить в очень «специальные» случаи несколько ViewControllers одного и того же класса для различных размер в единую раскадровку. Таким образом, вы не забудете об обновлении второго (и третьего), потому что там все в порядке.

Я использую только несколько «параллельных» раскадровки для приложений, которые поддерживают iPhone и IPad, и это имеет смысл, чтобы действительно разделить их ..

также:

я в фас, как можно по-прежнему использовать только одно представление и получить другие «версии» от других в коде. Если вы построите структурированный пользовательский интерфейс, вы можете повторно использовать (или просто наследовать) код, который «скрывает» части первого viewController в следующем. Таким образом, ваш код И ваши файлы IB не будут загромождать.

думать также о интернационализации (если это является частью ваших будущих планов), поскольку несколько документов IB и несколько экземпляров одного и того же макета ViewController действительно не помогают для этого;)

+0

Не могли бы вы рассказать об этой части: «Используйте один раскадровки (или несколько, но для разных частей приложения, а не параллельных), а затем добавьте в« особые »случаи несколько ViewControllers того же класса для разного размера в одиночный раскадровки. Таким образом, вы не забудете об обновлении второго (и третьего), потому что там все в порядке ». - может быть, потому, что я устал, но я действительно не понимаю процесс, который вы предлагаете. – eemerge

+0

Я попытался сказать следующее: я бы расколол раскадровки, если у первого было слишком много ViewControllers. Чтобы решить вашу проблему, если вы хотите иметь два разных описания макета для одного и того же экрана, но iOS-устройства различного размера, я бы, в общем, поместил их в одну раскадровку только с разными идентификаторами. Таким образом, если вы измените то, что повлияет на обоих, они оба находятся прямо там. НО: Я бы пошел только по этому пути, если это не произойдет для каждого отдельного представления, но только для некоторых с резкими различиями. –

+0

Когда вы говорите о «разных идентификаторах», вы ссылаетесь на представления (например, на главные контейнеры) или кнопки (или другие элементы пользовательского интерфейса)? В принципе, мне нужно это только для «основного» представления, так как все остальные представления могут обрабатываться с использованием классов автозапуска и размера. – eemerge

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