在UISegmentedControl中拉伸图像

时间:2014-01-26 21:32:58

标签: ios uisegmentedcontrol

我正在尝试将图像添加到我的UISegmentedControl中,但图像总是会自动拉伸以填充整个控件(参见图片)。我目前正通过调用setImage:forSegmentAtIndex:来设置图像。如何设置图像以保持其纵横比?这似乎应该是一件容易的事,但我无法弄明白。

UISegmentedControl with stretched icon

4 个答案:

答案 0 :(得分:2)

设置图像时,请使用:

UIImage *myNewImage = [myOldImage resizableImageWithCapInsets:UIEdgeInsetsMake(top, left, bottom, right)];
[segment setImage:myNewImage forSegmentAtIndex:i];

top, left, bottom, and right是您愿意伸展的图像边缘。如果您不想要任何可伸展区域,请使用UIEdgeInsetsZero

答案 1 :(得分:2)

使用足够小的@ 1x图像,使其根本不需要缩放,并且宽高比不会搞砸。当然,你的@ 2x和@ 3x图像可能更大。

答案 2 :(得分:0)

设置图像时,可以使用以下代码在图像周围设置边距:

yourSegmentedControl.setImage(yourImage.resizableImage(withCapInsets: .init(top: 0, left: 10, bottom: 0, right: 10), resizingMode: .stretch), forSegmentAt: 0)

您可以根据需要更改“顶部”,“左侧”,“底部”和“右侧”的值。这对我有用,我希望它会有所帮助!

答案 3 :(得分:-1)

与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];
    }

这样做解决了我的问题(就像你描述的那样。)