Растянутые изображения в UISegmentedControl
Я пытаюсь добавить изображения в свой UISegmentedControl, но изображение всегда автоматически растягивается, чтобы заполнить весь элемент управления (см. рисунок). В настоящее время я устанавливаю изображение, вызывая setImage: forSegmentAtIndex:. Как настроить изображение так, чтобы он поддерживал соотношение сторон? Кажется, что это должно быть легко сделать, но я не смог понять это.
![UISegmentedControl with stretched icon]()
Ответы
Ответ 1
При настройке изображения используйте:
UIImage *myNewImage = [myOldImage resizableImageWithCapInsets:UIEdgeInsetsMake(top, left, bottom, right)];
[segment setImage:myNewImage forSegmentAtIndex:i];
Где top, left, bottom, and right
- это края изображения, которое вы готовы растянуть. Если вы не хотите растягивать область, используйте UIEdgeInsetsZero
.
Ответ 2
Вы можете использовать следующий код для установки поля вокруг своего изображения при настройке изображения:
yourSegmentedControl.setImage(yourImage.resizableImage(withCapInsets: .init(top: 0, left: 10, bottom: 0, right: 10), resizingMode: .stretch), forSegmentAt: 0)
Вы можете изменить значения "сверху", "слева", "снизу" и "справа", как вы хотите. Это сработало для меня, надеюсь, это поможет!
Ответ 3
Очень похоже на ответ dalton, хотя я строю свой взгляд в построителе интерфейса, поэтому пришлось заменить изображения, что-то вроде этого:
self.codesDisplaySegment.contentMode = UIViewContentModeCenter;
for (int ii = 0 ; ii < self.codesDisplaySegment.numberOfSegments ; ++ii)
{
UIImage *img = [self.codesDisplaySegment imageForSegmentAtIndex: ii];
img = [img resizableImageWithCapInsets: UIEdgeInsetsZero];
[self.codesDisplaySegment setImage: img forSegmentAtIndex: ii];
}
Это разрешило мою проблему (что было, как вы описали).