2013-08-11 5 views
47

Я пытаюсь воспроизвести макет, который у меня есть в приложении для Android, но я не знаю, как это сделать в iOS, особенно из-за высоты iPhone 5.Создание макета iOS на основе процентов

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

Лучший способ объяснить это:

  1. Я хочу две раскладки. Верхняя компоновка должна занимать 40%, а нижняя часть должна занимать 60%.
  2. В верхней макете должно быть три кнопки, которые заполняют все возможное пространство (по существу, 1/3 пробела)
  3. В нижней макете я хочу, чтобы изображениеView, а затем textView поверх этого.

Это макет краски. Это можно сделать в iOS? Я считаю, что макеты намного сложнее создавать, чем андроид.

enter image description here

+0

Вы используете автоматическую компоновку в IB? Или вы, возможно, знаете о Спрингсе и Струте? –

+0

Я не слышал о «Спрингсе и Стратах». Не могли бы вы реализовать это с помощью конструктора интерфейса? – EGHDK

+0

http://disanji.net/iOS_Doc/#documentation/DeveloperTools/Conceptual/IB_UserGuide/Layout/Layout.html –

ответ

2

Я не знаю об использовании autolayout как я не использую его, но в коде без него, вы можете создать два UIViews и устанавливать свои кадры:

CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height * 0.4f); 
CGRectMake(0, self.view.frame.size.height * 0.4f, self.view.frame.size.width, self.view.frame.size.width * 0.6f); 

, а затем в вид сверху, вы можете добавить кнопки с рамой (предполагающая видом называется view1):

CGRectmake(0, 0, self.view.frame.size.width, view1.frame.size.height * (1.0f/3.0f)); 
CGRectmake(0, view1.frame.size.height * (1.0f/3.0f), self.view.frame.size.width, view1.frame.size.height * (1.0f/3.0f)); 
CGRectmake(0, view1.frame.size.height * (2.0f/3.0f), self.view.frame.size.width, view1.frame.size.height * (1.0f/3.0f)); 
0

Это может быть сделана АВТОМАТИКА при использовании раскадровки (возможно, вам придется изменить настройки или два здесь и там). Когда вы создаете свой графический интерфейс, вы можете переключаться между размерами экрана (3,5 и 4 дюйма), чтобы убедиться, что он будет хорошо выглядеть на обоих. See the answer to this question.

You could also see this tutorial. Это должно дать вам представление о том, как работать с макетами GUI.

+0

Этот ответ не является достаточно конкретным, чтобы быть полезным, для этого вопроса, ИМХО. В частности, запрошенное соотношение «40%/60%» НЕ легко делается с помощью раскадровки. Также две ссылки в ответе не проливают свет на то, как это сделать (AFAIK, основанный на кратком просмотре). – ToolmakerSteve

+0

Hm, true @ToolmakerSteve. Я не знаю, о чем думал, когда писал это ... 4 года назад. – CaptJak

1

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

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

  2. Этот же принцип применяется к кнопкам внутри верхнего вида. Поместите ваши кнопки с правильным размером внутри верхнего вида и добавьте похожие ограничения, но теперь у вас есть три элемента (вместо двух). Таким образом, ограничения для нулевого интервала в верхней, нижней и между кнопками.

Когда вы добавляете компоненты в свое представление, это создаст для вас несколько ограничений. Добавив один верх, а другой снизу, он создаст как интервал между вершинами и между ними. Чтобы отредактировать их, просто перейдите к инспектору, пятая вкладка (линейка), и вы увидите список ограничений. Наконец, вы можете попробовать использовать меню ограничений (я не знаю, есть ли для этого известное имя). Он находится в нижнем правом углу холста Interface Builder.Смотрите изображение:

enter image description here

Пожалуйста, дайте мне знать, если вам нужна дополнительная помощь.

+0

Сначала щелкните по файлу XIB или сюжетной панели и снимите флажок с автоматической раскладки, чтобы вы могли видеть эти параметры: –

+0

Правильно, @MahmoudFayez. Я забыл упомянуть об этом. Спасибо. – rocir

+0

Я думал, что автоматическая калибровка недоступна в автомаркете? – EGHDK

37

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

visual constraints

Синие линии, которые вы видите, есть ряд ограничений, которые определяют расстояние между кнопками, пространство вокруг кнопок, а также высоты и ширины кнопок. Вы можете увидеть пару ограничений, на которых есть = - я выбрал все три кнопки и дал им ограничение «равной высоты».

Есть хороший visual format syntax, который позволяет описывать ограничения как строки. Потратьте минутку, чтобы посмотреть на связанный документ - вам не потребуется намного больше времени, чтобы узнать, что вы можете читать строки. Например, ваш лучший макет может быть определен следующим образом:

V:[button1]-[button2(==button1)]-[button3(==button1)] 

в скобки ==button1 говорит системе компоновки, чтобы сделать button2 и button3 такой же высоты, как button1. - указывает, что между кнопками должен использоваться стандартный интервал; вы можете указать другой интервал, если хотите. Для 10 расстояния между точками, сделайте следующее:

V:|-10-[button1]-10-[button2(==button1)]-10-[button3(==button1)]-10-| 

После того, как у вас есть такие строки, вы можете превратить его в ограничение с помощью метода: +[NSLayoutConstraint constraintsWithVisualFormat:options:metrics:views:]

Некоторых ограничений не могут быть заданы либо визуально, либо с описанных выше. Главными среди них являются те, где вы хотите установить постоянную (но неравную) взаимосвязь между двумя представлениями, как с вашими верхними и нижними макетами. Вы хотите, чтобы один из них занимал 40% доступного вертикального пространства, а другой - 60%. Сделайте это, используя метод: +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]. Например:

NSLayoutConstraint *c = [NSLayoutConstraint constraintWithItem:bottomView 
                attribute:NSLayoutAttributeHeight 
                relatedBy:NSLayoutRelationEqual 
                 toItem:topView 
                multiplier:1.5 
                 constant:0]; 

Это дает ограничение, которое устанавливает высоту bottomView в 1,5 раза высота topView (что вы хотите, так как 60/40 = 1.5).

Если вы создаете ограничения программно, вы можете добавить их в соответствующее представление при создании (или загрузке) иерархии представлений. Метод -viewDidLoad контроллера вашего вида - прекрасное место для этого.

+0

Хотя я хочу использовать автозапуск. Я говорю, что я не хочу его использовать? Я смущен? Пожалуйста, дайте мне знать, если я скажу это где-нибудь.Весь мой смысл в том, что я хочу использовать автоматическую компоновку, а не использовать код для этого. – EGHDK

+0

Кроме того, кнопки, которые вы объясняли для использования в автозапуске, хороши и хороши, но у меня все еще возникают проблемы при выполнении 40/60 в интерфейсе строитель. – EGHDK

+0

Кроме того, кнопки должны занимать 1/3 изображения, при этом их равные друг другу все равно не заполняют представление, в которое они вложены. – EGHDK

68

Использование Xcode 6.0 теперь вы можете указать пропорциональную ширину или высоту в Interface Builder. Шаги для процентного роста от супервизора:

Если выбраны как дочерний вид, так и его супервизор, добавьте ограничение «равной высоты» (или «равную ширину», если вы хотите иметь пропорциональную ширину).

enter image description here

Затем измените «множитель» от ограничения вы только что добавили в пропорции вам нужно.Так, например, на 50%, измените его на 2.

Если вы хотите, чтобы указать внутренний вид, как процент от надтаблицы, вы можете поменять местами элементы в ограничении:

enter image description here

Теперь вам может использовать множитель 0,5 (или любой другой пропорции вам нужно):

enter image description here

В вашем конкретном случае, вы можете определить «равна высоте» ограничение между 2 видами ребенка и изменить т он умножится на 1,5 (нижний размер равен 1,5 размерам) или 0,6667, если предметы будут отменены.

+0

Привет, я обнаружил, что если я выберу как дочерний вид, так и супервизор, все элементы в «Pin» будут не выбраны, как вы могли бы выбрать ограничение «равной высоты» и добавить? Может, я что-то пропустил, и ты, пожалуйста, объяснишь меня? Благодарю. – demon

+0

как вы относились к супер взгляду ?? – kozla13

+0

@ kozla13 Чтобы создать ограничение, пересекающее несколько видов в иерархии представлений, обычно проще перетащить управление из представления в контейнер в виде контура интерфейса Builder. В появившемся наложении ограничений установите необходимые ограничения для представления. https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/Art/sv_constraints.png – dusty