Обновление:
По-видимому, нет способа установить выравнивание элементов, но вы можете подделать его, отрегулировав положение каждого отдельного элемента с помощью setContentOffset(_ offset: CGSize, forSegmentAt segment: Int)
.Вот хитрый пример:
class LeftSegmentedControl: UISegmentedControl {
var margin : CGFloat = 10
override func layoutSubviews() {
super.layoutSubviews()
leftJustifyItems()
}
func leftJustifyItems() {
let fontAttributes = titleTextAttributes(for: .normal)
let segments = numberOfSegments - 1
let controlWidth = frame.size.width
let segmentWidth = controlWidth / CGFloat(numberOfSegments)
for segment in 0...segments {
let title = titleForSegment(at: segment)
setWidth(segmentWidth, forSegmentAt: segment)
if let t = title {
let titleSize = t.size(withAttributes: fontAttributes)
let offset = (segmentWidth - titleSize.width) / 2 - margin
self.setContentOffset(CGSize(width: -offset, height: 0), forSegmentAt: segment)
}
}
}
}
Вот как это выглядит:
Есть несколько предостережений:
В этой версии все сегменты имеют одинаковую ширину, которая может быть не такой, как вы хотите.
Я использовал фиксированное левое поле в 10 пикселей, потому что кажется маловероятным, что выВы хотите изменить это, но вы, очевидно, можете изменить его или сделать его настраиваемым свойством.
То, что вы можете сделать это, не означает, что выдолжен. Лично я не думаю, что это выглядит великолепно, и страдает в отделе юзабилити тоже.Пользователи ожидают, что сегментированные элементы управления будут центрированы, а выравнивание по левому краю элементов затруднит для них понимание, где нажать, чтобы попасть в сегмент.Это особенно актуально для коротких предметов, таких как «3-й» в примере.Это не ужасно, просто кажется немного странным.
Оригинальный ответ:
UIControl (подкласс которого UISegmentedControl) имеет *Свойство 1040 *, которое должно указывать элементу управления выравнивать его содержимое определенным образом, поэтому логично было бы установить его следующим образом:
let segmented = UISegmentedControl(items: ["Yes", "No", "Maybe"])
segmented.frame = CGRect(x:75, y:250, width:250, height:35)
segmented.contentHorizontalAlignment = .left
Но это не работает - вы все равно получаетеэтикетки по центру.Если у вас есть убедительный вариант использования для выровненных по левому краю сегментов, вы должны отправить запрос в Apple.
Один из способов решения этой проблемы - визуализировать ваши ярлыки в изображения, а затем использовать изображения в качествеметки сегмента вместо простых строк.Начиная с кода в Как преобразовать UIView в изображение , вы можете легко создать подкласс UISegmentedControl для создания изображений из строк элементов.