2012-07-04 32 views
4

我使用UILabel作爲的leftView。問題是textField的文本高於標籤的文本。如何將用作UITextField中左視圖的UILabel與textField的文本垂直對齊?

這是我的代碼到目前爲止

UILabel *startsWith = [[UILabel alloc] init]; 
startsWith.font = [UIFont systemFontOfSize:14]; 
startsWith.textColor = [UIColor blackColor]; 
startsWith.backgroundColor = [UIColor clearColor]; 
startsWith.text = @"Text"; 
[startsWith sizeToFit]; 
self.textField.leftViewMode = UITextFieldViewModeAlways; 
self.textField.leftView = startsWith; 

我稍微試圖改變標籤的框架,但它沒有工作使用...

我該如何調整兩種文本?

+1

你可以嘗試繼承'UITextField'然後重寫' - (的CGRect)leftViewRectForBounds:' – sooper

回答

5

您可以創建一個容器視圖,在該視圖中將位置設置爲1px。

UIView * v = [[UIView alloc] init]; 
    v.backgroundColor = [UIColor clearColor]; 

    UILabel *startsWith = [[UILabel alloc] init]; 
    startsWith.font = self.textfield.font; 
    startsWith.textAlignment = self.textfield.textAlignment; 
    startsWith.textColor = [UIColor blackColor]; 
    startsWith.backgroundColor = [UIColor clearColor]; 
    startsWith.text = @"Text"; 
    [startsWith sizeToFit]; 

    startsWith.frame = CGRectOffset(startsWith.frame, 0, -1); 
    v.frame = startsWith.frame; 
    [v addSubview:startsWith]; 
    self.textfield.leftViewMode = UITextFieldViewModeAlways; 
    self.textfield.leftView = v; 
+0

它完美!謝謝!有沒有辦法減少標籤和文本輸入之間的水平空間? – Moxy

+1

不客氣。也許你可以通過減少左視圖的寬度來減少它,在這種情況下v的框架,我現在無法測試它。如果你需要更多的特殊功能,也許子類和方法重寫是最好的方法。看[這裏](http://stackoverflow.com/questions/2694411/text-inset-for-uitextfield)。 – Templar

+0

減少了左視圖的寬度!再次感謝!! – Moxy