Нашел в документации такую формулу для расчета constraint.
Подскажите, плз, откуда здесь берется multiplier, который множитель? В данном случае он равен 1.0. В пояснениях говорится только то, что на него умножается значение attribute 2.
Нашел в документации такую формулу для расчета constraint.
Подскажите, плз, откуда здесь берется multiplier, который множитель? В данном случае он равен 1.0. В пояснениях говорится только то, что на него умножается значение attribute 2.
Множитель указывается в конструкторе констрейнта (если создаешь обычный констрейнт без различных либ).
В основном для того, чтобы задавать соотношение сторон одного объекта. В той статье чуть ниже есть примеры:
// Give a view a constant aspect ratio
View.height = 2.0 * View.width + 0.0
// Setting a constant height
View.height = 0.0 * NotAnAttribute + 40.0
так а что он означает? Вся эта формула какая-то странная. Предположим, надо задать расстояние по горизонтали между двумя вьюверами - BlueView and RedView, как в первом примере.
Почему нельзя просто написать:
BlueView.trailing = 8, RedView.leading = 0
Зачем здесь вдруг появляются и этот множитель, а еще и константа? Я понимаю, что можно выставить констрэйнт в билдере и не париться. Но вот начал делать более сложный макет, и элементы разъезжаются, хотя вроде все сделано по образцу, как и раньше. Приходится возвращаться и разбираться в деталях, на простых примерах. Отсюда и вопрос - что за смысл в этой формуле, как ею пользоваться?
Вот тебе задача:
надо чтобы вьюха сверху пропорционально менялась в зависимости от устройств. Если на SE высота экрана условно, 568, и вьюха занимает 1/3, то как ты ее правильно покажешь на других экранах? Например на X, где высота 812?
вот именно эту задачу я и пытаюсь решить. На сегодняшний день есть только позиционирование и размеры элемента. Т.е. в твоем конкретном примере, можно задать констрэйнты по высоте - top и bottom. Они будут фиксированные, а размер элемента по высоте будет не фиксированный. Отсюда, констрэйнты будут растягивать элемент на тех экранах, где размер больше.
Но это простой случай. У меня в макете идут сверху вниз три лэйбла, затем текст вью, затем еще лэйбл, затем текст филд и три кнопки. И как не пытаюсь их упаковать в стек вью или использовать отдельные констрэйнты, они расползаются. И главная проблема именно с текст вью.
В итоге получается, что констрэйнты решают вопрос только частично. С их помощью можно только фиксировать расстояния с четырех сторон элемента или размеры (высоту и ширину) самого элемента. Но в ряде случаев это не работает, или работает не так, как хотелось бы. Ниже три скрина с примерами. 1- исходный лэйбл на айфоне 8, второй - как выглядит на айпаде сейчас при фиксированных констрэйнтах (сверху, слева, справа), и 3-й как хотелось бы, т.е. чтобы и размеры и констрэйнты со всех сторон увеличивались бы пропорционально.
Вы просто не полностью их освоили
Например есть возможность привязать высоту выбранного вами лебла к высоте экрана. И вот там как раз и нужно будет использовать множитель.
YourLabel.height = 0.1 * View.height
так а как это конкретно реализовать? Например, в сториборде на экране есть label, от него outlet во ViewController. Дальше, через viewDidLoad пытаюсь найти свойство height, но там его нет. Есть только heightAnchor.
И как дальше найти height во View?
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var firstLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
firstLabel.heightAnchor = 0.1 * View.height // Здесь выдает ошибку
}
}
я вам привел пример формулы о которой был вопрос.
Почитайте как добавлять констрейнты. У вас есть недопонимание в этом вопросе
ну да, есть недопонимание, поэтому я и прошу помощи у тех, у кого есть понимание. Перерыл уже кучку документации и форумов, там иногда про эту формулу говорят, но в общем. Можно какой-нибудь пример, чтобы посмотреть как она работает?