Я пытаюсь выровнять две-три кнопки по горизонтали в представлении. Для простоты я покажу свою попытку выравнивания двух кнопок.
Это работает для кнопок с коротким заголовком:
@"H:|-10-[questionButton1(questionButton2)]-5-[questionButton2]-10-|"
Но как только одна из кнопок получает более длинный заголовок, он прерывается следующим образом:
В итоге я вычислил ширину каждой кнопки, а затем, если ширина кнопки 1 больше половины представления и больше ширины кнопки 2, я использовал:
@"H:|-10-[questionButton1(==btn1width)]-5-[questionButton2(>=btn2width)]-10-|"
Это работает, но мне не очень нравится внешний вид моего кода с такими вычислениями. Только представьте сложность, которую добавляет третья кнопка. Кроме того, есть проблема, если обе кнопки имеют довольно длинный заголовок, и в этом случае мне придется выяснить, следует ли мне уменьшить размер шрифта, чтобы все уместилось.
Я публикую это здесь, потому что я мог упустить какую-то магическую вещь, касающуюся автомакета, поскольку я только сегодня начал использовать его в коде. Любая помощь будет принята с благодарностью.
--- ОБНОВЛЕНИЕ (уточнение) ---
Я хочу, чтобы кнопки разделялись равномерно с учетом полей (10 снаружи и 5 между кнопками). В идеале они должны быть одинаковой ширины, если размер текста соответствует размеру по умолчанию (50%:50% для двух кнопок и 33%:33%:33% для трех кнопок). В случае, если заголовок кнопки превышает эту идеальную ширину, кнопка должна увеличить свою ширину, если это разрешено другими кнопками (если другие могут сжиматься). Если расширение или сжатие невозможно, большая кнопка должна уменьшить размер шрифта и повторить процедуру (проверьте, могут ли другие кнопки сжиматься). Да, я знаю, я много прошу :)
--- ОБНОВИТЬ ---
Ответ @Sikhapol помог мне решить эту проблему. Я добавил несколько вещей, чтобы уменьшить размер шрифта, добавить отступы и сделать так, чтобы заголовки кнопок располагались в несколько строк, если текст не помещается:
btn.contentEdgeInsets = UIEdgeInsetsMake(0, 5, 0, 5);
btn.titleLabel.adjustsFontSizeToFitWidth = YES;
btn.titleLabel.numberOfLines = 0;
btn.titleLabel.minimumScaleFactor = 0.7;
Конечный результат: