2014-07-11 175 views
1

我試圖讓文字右側的圖像(它是建立在IB)。我發現here的想法是子類的UIButton並重寫:UIButton圖像右側居中文本

- (CGRect)imageRectForContentRect:(CGRect)contentRect 

- (CGRect)titleRectForContentRect:(CGRect)contentRect` which I did. 

但在例如像推一路按鈕的右邊。我希望它出現在我的中心文本之後。所以,我想,如果我能用某種字體獲得width of the label,我可以這樣做。

這是完美的。但。如果我這樣做,在imageRectForContentRect這樣的:

- (CGRect)imageRectForContentRect:(CGRect)contentRect 
{ 
    CGSize textSize = [self.titleLabel.text sizeWithAttributes:@{NSFontAttributeName: self.titleLabel.font}]; 
} 

我得到一個無限循環(因爲調用self.titleLabel調用imageRectForContent,它調用TEXTSIZE碼等

所以這是行不通的。

是否有另一種方法可以輕鬆地能得到我的圖片上的文字的右側居中文本的按鈕?

我嘗試這種方法,因爲我想支持多種語言和對接的文本on可以有不同的長度。

回答

3

這樣做,在IB的一個簡單的概念,在屬性Ispector,最後的選擇是從邊緣的下拉「邊緣」 選擇圖像,然後增加它的左值,現在選擇標題和增加它的左值負。 現在將得到你的結果。

+1

是的,但這隻適用於確切長度的字符串。在翻譯中,長度可能不同。 – Matthijn

+0

你可以根據st字符串的不同長度增加你的按鈕長度。如果是,那麼在設置Text on按鈕後,必須通過self.imageEdgeInsets = UIEdgeInsetsMake(0.0,0.0,(btSize.width - imageSize.width),0.0)更改圖像的插入點。 – Surjeet

11
- (void)swapImageText 
{ 
    self.transform = CGAffineTransformScale(self.transform, -1.0f, 1.0f); 
    self.titleLabel.transform = CGAffineTransformScale(self.titleLabel.transform, -1.0f, 1.0f); 
    self.imageView.transform = CGAffineTransformScale(self.imageView.transform, -1.0f, 1.0f); 
} 

我的UIButton類別。如果假定任何UIButton具有標識轉換,所有其他代碼都將被違反。

+1

工作完美! –