rightView UITextField的位置

Awe*_*e-o 10 objective-c uitextfield uikit ios

有没有办法调整UITextField上rightView的位置?我尝试在视图上设置框架(设置为rightView),但它没有改变任何东西.

我想避免制作两个视图,一个作为rightView,另一个作为rightView的子视图,如果可能的话我更改子视图的位置.

Pun*_*rma 28

右重叠视图被放置在由返回的矩形rightViewRectForBounds:所述接收机的方法.

所以我建议你继承UITextField并重写这个方法,如下所示:

@interface CustomTextField: UITextField

@end

@implementation CustomTextField

// override rightViewRectForBounds method:
- (CGRect)rightViewRectForBounds:(CGRect)bounds{
    CGRect rightBounds = CGRectMake(bounds.origin.x + 10, 0, 30, 44);
    return rightBounds ;
}
Run Code Online (Sandbox Code Playgroud)

  • 凉.但是我找到了正确的视图标注我更好地使用bounds.size.width - 30即CGRect rightBounds = CGRectMake(bounds.size.width - 30,0,30,50); 通过这种方式,它可以获取文本字段的宽度,并减去该数字以获得右视图的填充 (3认同)

Zon*_*ame 6

@Puneet Sharma的回答很棒,但这需要创建一个子类的类UITextField,而我所做的是创建一个UIView用作填充。

我的代码无需子类即可工作

这是我的代码,尽管它是用Swift 3编写的

// this is the view I want to see on the rightView
let checkImageView = UIImageView(image: UIImage(named: "check24.png"))
checkImageView.frame = CGRect(x: 0, y: 0, width: 24, height: 24)
checkImageView.curveEdges(12)
checkImageView.contentMode = .scaleAspectFit

// declare how much padding I want to have
let padding: CGFloat = 6

// create the view that would act as the padding
let rightView = UIView(frame: CGRect(
    x: 0, y: 0, // keep this as 0, 0
    width: checkImageView.frame.width + padding, // add the padding
    height: checkImageView.frame.height)) 
rightView.addSubview(checkImageView)

// set the rightView UIView as the textField's rightView
self.textField.rightViewMode = .whileEditing
self.textField.rightView = rightView
Run Code Online (Sandbox Code Playgroud)

此处发生的是,rightView这是UIView具有透明彩色背景的,然后给人一种幻想,即存在填充,而没有填充。