[英]How do I add padding to a UITextField with an icon
我目前有以下代碼來設置密碼文本字段:
self.passwordTextField = [UITextField new];
self.passwordTextField.placeholder = @"Password";
self.passwordTextField.font = [UIFont systemFontOfSize:18.f];
self.passwordTextField.secureTextEntry = YES;
self.passwordTextField.returnKeyType = UIReturnKeyDone;
self.passwordTextField.delegate = self;
self.passwordTextField.backgroundColor = [UIColor colorWithRed:255 green:255 blue:255 alpha:0.64];
self.passwordTextField.layer.borderColor = [[UIColor lightGrayColor] CGColor];
self.passwordTextField.layer.borderWidth = 1.0f;
CGFloat textFieldHeight = 45.f;
CGFloat textFieldWidth = 300.f;
self.passwordTextField.frame = CGRectMake(DIALOG_VIEW_WIDTH/2.f - textFieldWidth / 2.f, 240.f, textFieldWidth, textFieldHeight);
UIImageView *icon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"text-input-icon-password-key.png"]];
icon.frame = CGRectMake(0, 0, 45.f, 45.f);
icon.backgroundColor = [UIColor lightGrayColor];
self.passwordTextField.leftView = icon;
self.passwordTextField.leftViewMode = UITextFieldViewModeAlways;
[self.dialogView addSubview:self.passwordTextField];
這給了我這個:
但是,我想在占位符文本的左側和顯示圖標的圖像視圖的右側添加一些更透明的填充。 有什么想法可以做到這一點?
更新:感謝您的回復。 我最終通過為整個對象創建一個UIView來實現這一點,其中UIImageView用於圖標,UITextField嵌入另一個UIView用於文本。 結果如下:
“ 更新:感謝您的回復。我最終通過為整個對象創建了一個UIView來實現這一目標,其中包含用於圖標的UIImageView和用於文本的另一個UIView中嵌入的UITextField。 ”
您可以繼續使用UITextField
的leftView
屬性:
UIView *vwContainer = [[UIView alloc] init];
[vwContainer setFrame:CGRectMake(0.0f, 0.0f, 50.0f, 45.0f)];
[vwContainer setBackgroundColor:[UIColor clearColor]];
UIImageView *icon = [[UIImageView alloc] init];
[icon setImage:[UIImage imageNamed:@"text-input-icon-password-key.png"]];
[icon setFrame:CGRectMake(0.0f, 0.0f, 45.0f, 45.0f)];
[icon setBackgroundColor:[UIColor lightGrayColor]];
[vwContainer addSubview:icon];
[self.passwordTextField setLeftView:vwContainer];
[self.passwordTextField setLeftViewMode:UITextFieldViewModeAlways];
如果要完全控制自定義布局,則應該leftViewRectForBounds:
UITextField
並覆蓋leftViewRectForBounds:
和placeholderRectForBounds:
方法。 然后,您可以返回兩個區域的幀,從而指定它們之間的填充。
這是一個UITextField子類,允許在leftView(圖標),文本和占位符文本上使用insets。 這些都可以在IB中配置
class UITextFieldWithInsets: UITextField {
@IBInspectable var horizontalInset:CGFloat = 0
@IBInspectable var verticalInset:CGFloat = 0
@IBInspectable var leftViewHorizontalInset:CGFloat = 0
@IBInspectable var leftViewVerticalInset:CGFloat = 0
override func textRectForBounds(bounds: CGRect) -> CGRect {
return CGRectInset(bounds , horizontalInset , verticalInset)
}
override func editingRectForBounds(bounds: CGRect) -> CGRect {
return CGRectInset(bounds , horizontalInset + leftViewHorizontalInset + leftViewWidth, verticalInset)
}
override func placeholderRectForBounds(bounds: CGRect) -> CGRect {
return CGRectInset(bounds, horizontalInset + leftViewHorizontalInset + leftViewWidth, verticalInset)
}
override func leftViewRectForBounds(bounds: CGRect) -> CGRect {
let verticalInsetForCentered = (bounds.height - leftViewHeight) / 2
return CGRect(x: leftViewHorizontalInset, y: leftViewVerticalInset > 0 ? leftViewVerticalInset : verticalInsetForCentered, width: leftViewWidth, height: leftViewHeight)
}
private var leftViewWidth : CGFloat { get { return leftView?.frame.width ?? 0 } }
private var leftViewHeight : CGFloat { get { return leftView?.frame.width ?? 0 } }
}
您可以使用更寬的圖像作為帶有右透明列的圖標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.