2016-05-18 3 views
2

Я использую раскадровки для компоновки моих представлений. Я позиционирую виды с ограничениями. У меня вопрос об изменении размера ограничения. Как установить различные константы ограничений для разных размеров устройств без программирования if/else. Есть ли способ установить его в раскадровке? Я имею верхнее ограничение для родительского макета, например, с постоянным значением 10. Это нормально для экрана iPhone 5, но на экране iPhone 6/6 plus он должен быть выше 10. Таким образом, ограничение должно быть рассчитано. В настоящий момент я вычисляю масштабный коэффициент следующим образом:Значения ограничений автоматической компоновки iOS для разных размеров устройств

let bounds = UIScreen.mainScreen().bounds; 
    let width = bounds.size.width; 
    let scaleFactor = width/320; // 320 because base design was created for iPhone 5 

    // calc top constraint connect from storyboard 
    self.topConstraintView.constant = self.topConstraintView.constant * scaleFactor; 

Правильно ли это иметь дело с ограничениями на разных устройствах?

+0

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

+0

Как установить различные константы ограничений для разных размеров устройства в построителе интерфейса? Я не знаю, как это сделать. – alf1990

+0

В построителе интерфейса вы не можете сделать это с тем же самым xib, там arent варианты для реализации ограничений, меняя тип устройства –

ответ

2

как об использовании DeviceLayouthttps://github.com/cruisediary/DeviceLayout

просто установить константу на размер устройства, используя IBInspectable без кода

enter image description here

enter image description here

+1

Я намеренно нарушаю правило комментариев, чтобы сказать «спасибо». Это элегантно и лаконично. Красиво сделано @cruz. –

1

Обычно вы можете сделать это с общим 600x600, используя размеры классов, и вы также можете построить универсальный (iPad/iPhone) интерфейс. Вы можете найти множество гидов, чтобы понять это. В зависимости от того, что вы хотите реализовать (плохие детали, больше текста ..) и, одна из возможных проблем, правильно обрабатывать ориентацию (пейзаж/портрет), потому что на больших устройствах много раз вы должны центрировать свои взгляды/объекты ,

Иногда лучше, (чтобы не потерять детали, качество изображения ..), чтобы реализовать разные xib на основе различных измерений устройства, особенно когда вы имеете дело с пользовательскими tableViewCells, imageViews.

Здесь, в нижней части Есть iPhone различные размеры:

enter image description here

+0

Большое спасибо за ответ. Да, это тип файла раскадровки, который я использую. Размер моего представления - 600x600. Но когда я устанавливаю верхнее ограничение элемента ui на 10, оно равно 10 на всех экранах устройств. Измерение отлично подходит для iPhone 5, но на iPhone больше, чем у iPhone 5, константа должна быть выше 10. Мне жаль, но я не знаю, как объяснить это лучше :(. Единственное решение здесь использовать разные xibs для разных размеров устройств? – alf1990

+0

Я знаю, что с классами размера вы можете отображать/скрывать элементы на разных устройствах, в зависимости от размера устройства, но как насчет констант ограничения? Я хочу установить разные константы ограничений на разных устройствах. – alf1990

+0

Нет, используя autolayout, вы можете установить верхнее ограничение как IBOutlet, вызванное, например, topMyViewConstraint, и изменить его с помощью topMyViewConstraint.constant = 10 + тип устройства проверки факторов, как вы запрашиваете в своем вопросе –

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