Растянутые изображения в 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];
    }

Это разрешило мою проблему (что было, как вы описали).