2014-01-26 100 views
10

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

UISegmentedControl with stretched icon

+0

我有相反的问题。我试图让我的图像拉伸,而现在只是居中 –

回答

2

当设置你的形象,使用:

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

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

+2

我试过'UIEdgeInsetsZero',现在图像根本不显示。 – shoopdelang

+2

我试过了,它似乎没有区别。 – shoopdelang

-1

非常相似,道尔顿的答案,虽然我建立我在界面生成器视图,因此不得不更换图片,这样的事情:(这是你描述)

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

这样做可以解决我的问题

+0

这调整了我的图像大小,但然后我的图像变得偏离中心 – Rick

0

您可以使用下面的代码来设置保证金在你的形象,当你设置图像:

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

你可以改变的“顶”,“左”的价值观, “底部”和“正确”,如你所愿。这对我有用,我希望它会有帮助!