2014-01-26 156 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) 

你可以改變的「頂」,「左」的價值觀, 「底部」和「正確」,如你所願。這對我有用,我希望它會有幫助!