【发布时间】:2014-02-17 14:56:30
【问题描述】:
我正在尝试将图像添加到我的 UISegmentedControl,但图像始终会自动拉伸以填充整个控件(见图)。我目前正在通过调用 setImage:forSegmentAtIndex: 来设置图像。如何设置图像以保持其纵横比?这似乎应该是一件容易的事,但我一直无法弄清楚。
【问题讨论】:
-
我有相反的问题。我正试图让我的图像拉伸,而它现在只是居中
我正在尝试将图像添加到我的 UISegmentedControl,但图像始终会自动拉伸以填充整个控件(见图)。我目前正在通过调用 setImage:forSegmentAtIndex: 来设置图像。如何设置图像以保持其纵横比?这似乎应该是一件容易的事,但我一直无法弄清楚。
【问题讨论】:
设置图像时,请使用:
UIImage *myNewImage = [myOldImage resizableImageWithCapInsets:UIEdgeInsetsMake(top, left, bottom, right)];
[segment setImage:myNewImage forSegmentAtIndex:i];
top, left, bottom, and right 是您愿意拉伸的图像的边缘。如果您不想要任何可拉伸区域,请使用UIEdgeInsetsZero。
【讨论】:
UIEdgeInsetsZero,现在图像根本不显示。
与道尔顿的回答非常相似,虽然我在界面构建器中构建了我的视图,所以不得不替换图像,如下所示:
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];
}
这样做解决了我的问题(正如您所描述的那样。)
【讨论】:
您可以在设置图像时使用以下代码在图像周围设置边距:
yourSegmentedControl.setImage(yourImage.resizableImage(withCapInsets: .init(top: 0, left: 10, bottom: 0, right: 10), resizingMode: .stretch), forSegmentAt: 0)
您可以根据需要更改“top”、“left”、“bottom”和“right”的值。这对我有用,我希望它会有所帮助!
【讨论】:
使用足够小的@1x 图像,使其完全不需要缩放,也不会弄乱纵横比。当然,您的@2x 和@3x 图像可以更大。
【讨论】: