在UISegmentedControl中拉伸图像

我试图添加图像到我的UISegmentedControl,但图像总是自动伸展,以填补整个控制(见图片)。 我目前通过调用setImage:forSegmentAtIndex:来设置图像。 如何设置图像以保持其高宽比? 这似乎应该是一件容易的事情,但我一直无法弄清楚。

带拉伸图标的UISegmentedControl

设置图像时,请使用:

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

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

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

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

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

与Dalton的答案非常相似,尽pipe我在界面生成器中构build了我的视图,所以必须replace图像,如下所示:

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

这样做解决了我的问题(正如你所描述的那样)。