我正在尝试将图像添加到我的UISegmentedControl中,但图像总是会自动拉伸以填充整个控件(参见图片)。我目前正通过调用setImage:forSegmentAtIndex:来设置图像。如何设置图像以保持其纵横比?这似乎应该是一件容易的事,但我无法弄明白。
答案 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];
}
这样做解决了我的问题(就像你描述的那样。)