2015-02-11 5 views
2

Для моего 1) только портфолио 2) приложение iOS7/iOS8 для развертывания, у меня есть в моем дизайне UIButtons с переменной высотой для iPhone 5, iPhone 6 и iPhone 6+. Я пытаюсь использовать автомат для этого. (Не используйте классы размера, хотя).Получить переменную высоту для UIButton для iPhones 5/6/6 +

Использование автоматического макета, как я могу указать переменную высоту для UIButton для этих трех размеров экрана. Кнопки отлично смотрятся на моделях iPhones 5 *, но тоньше на iphone 6/6 +. Теперь в авто макете могу сказать height> = or = или < = say 55), но как мне указать 44 для iphone5, 55 для iphone6, 66 для iphone6 ​​+?

Является ли это чем-то, что я могу достичь, используя только автоматическую компоновку или мне нужно, чтобы manupulate (frames) это в коде? Какой смысл использовать автомасштабирование?

В дополнение к рамкам в моих рисунках также указаны разные размеры шрифта. Как мне это сделать? Любые самые известные методы для этого, Stack-O друзья .. ??

+0

При использовании автозапуска вы всегда должны работать с ограничениями, а не с фреймом (ограничения могут быть изменены, анимированы ...) –

+0

@rokjarc, тогда как я могу указать переменные высоты с использованием ограничений в автоматическом макете? –

+0

Спасибо за кучу ответов. Я собираюсь попробовать их все и посмотреть, какая из них решает мою конкретную проблему. –

ответ

0

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

В вашей xib/раскадровке создайте выход для вашего вида/контроллера для ограничения высоты.

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

CGFloat height; 

// if iPhone 5 
// height = 44 
// else.......... 

self.buttonHeightConstraint.constant = height; 

Это автоматически вызовет флаг, который сообщает AutoLayout пересчитывать кадры и макет вида снова.

+0

Имейте в виду, что если это сделать за пределами 'viewDidLoad', ограничения, возможно, придется обновить. В случае «листовых» узлов (например, UIButton, UIImageView) это должно быть вызвано вызовом «invalidateIntrinsicContentSize». – joakim

+0

Спасибо @ Даниэль, пока ваш совет работает хорошо. Я все еще работаю над этим. –

+0

Спасибо Даниилу и @joakim .. Твой совет был на месте. Что я сделал до сих пор, так это то, что я подключил выход ограничения высоты макета к моему * .m-файлу и на основании размера экрана, я устанавливаю свойство контента в размере, который я хочу. Хорошо работать для меня до сих пор. Для людей, интересующихся тем, как подключать ограничения компоновки, поскольку выходы проверяют этот поток. http://stackoverflow.com/questions/22086054/unable-to-make-outlet-connection-to-a-constraint-in-ib –

0

Мне это удалось, добавив ограничение высоты в UIButton. Сделайте выход, и вы можете установить высоту в подклассе UIViewController с помощью _myConstraint.constant = 55;

+0

Итак, мне нужно иметь кучу # if в коде? Например, #if iphone5 _myConstraint.constant = 44 #if iphone6 ​​_myConstraint.constant = 55 #if iPhone6 ​​+ _myConstraint.constant = 66 –

+0

Они могут быть проверками времени выполнения.На данный момент нет способа проверить тип устройства в раскадровке, кроме размеров классов, которые могут или не могут быть поведением, которое вы хотите. –

+0

Нет, вы можете справиться с этим следующим образом: 'if ([[UIScreen mainScreen] .bounds.size.height == 568) { _myConstraint.constant = 44; } // iPhone 5' – Steeve

3

Вы правы, чтобы спросить: «Какая точка автоматического макета, если мне нужно напрямую манипулировать кадрами»? К счастью, вам не обязательно.

Простым способом это определить высоту относительно вида стандартной высоты (подумайте о представлении, которое соответствует всему экрану).

Например, мы можем установить высоту нашей кнопки равной половине высоты представления.

Таким образом, кнопка всегда будет масштабироваться с видом, вверх или вниз (по размеру). Автоматическая компоновка гарантирует, что соотношение между ними всегда будет равным 1/2.

enter image description here

enter image description here

Теперь кнопка будет половина размера его надтаблицы, независимо от размера.

+1

Это хороший способ обеспечить адаптивную компоновку, но очень необычно удовлетворить требования дизайнеров. Также в случае для этой кнопки вы хотели бы предоставить очень маленькие значения множителя, и я обнаружил, что это может быть проблемой в Xcode. Я попытался получить прописную строку между двумя кнопками внизу экрана один раз, установив автоматический макет ширина для кнопок будет равна ширине супер-просмотра с умножителем 0,4999, и это просто не получилось. Точность была слишком неточной. Похоже, этот парень должен просто менять константу ограничения во время работы, к сожалению – Daniel

+0

@ Даниэль Очевидно, что это будет работать вручную. В зависимости от уровня детализации, который требуется для каждого варианта использования, любой подход может выполнить это требование. – joakim