Ash*_*had 21 objective-c uitextfield ios
我有一个UITextField子类,我正在实现以下方法:
- (CGRect)textRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, 7);
}
-(CGRect) editingRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, 7);
}
Run Code Online (Sandbox Code Playgroud)
由于这两种方法,UITextField当输入的文本大于宽度时,不会滚动到结尾UITextField.这有什么解决方案吗?
if-*_*tch 12
它不起作用只是因为您声明的文本的字体大小UITextField和CGRectInset您正在申请.实际上它应该是你设置的字体大小.例如,对于14.0的字体大小,只需更改您的方法如下:
- (CGRect)textRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, 6);
}
-(CGRect) editingRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, 6);
}
Run Code Online (Sandbox Code Playgroud)
原因是文本的绘制矩形.例如,当我们将字体大小设置UITextField为14.0时,它至少需要18.0的高度来调整框架中的文本.所以它需要4个像素额外的文字,你可以说它覆盖框架.因此,在你的情况下,这个条件并不令人满意,因为据我猜你已经将字体大小调整为14.0并且默认情况下帧高UITextField是30.0而你的边缘掩蔽是每边7.0,这意味着总共14.0.因此,你的文本矩形返回16.0,这反过来阻止操作系统更新文本框架,因为它在图形上下文之外.我希望你很清楚.如果它解决了您的问题,那么请接受我的回答.更好的答案如下:
- (CGRect)textRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, (30 - self.font.pointSize - 4)/2);
}
-(CGRect) editingRectForBounds:(CGRect)bounds {
return CGRectInset(bounds , 30, (30 - self.font.pointSize - 4)/2);
}
Run Code Online (Sandbox Code Playgroud)
请享用!
UITextField CALayer这可能是您的自定义高度与插图和字体大小之间的冲突。
您可以尝试以下调整之一:
\n\n增加子类UITextField的高度Storyboard或以编程方式增加子类的高度,例如:
- (void)drawRect:(CGRect)rect {\n CGRect frameRect = self.frame;\n frameRect.size.height = 35 //specify the height you want;\n self.frame = frameRect;\n }\nRun Code Online (Sandbox Code Playgroud)减小 的 y 坐标值CGRectInset;
或者使用UIEdgeInsets对每个位置的设置值 \xe2\x80\x8b\xe2\x80\x8b 进行更多控制。就像是:
- (CGRect)textRectForBounds:(CGRect)bounds{\n UIEdgeInsets contentInsets = UIEdgeInsetsMake(5, 30, 5, 30);\n return UIEdgeInsetsInsetRect(bounds, contentInsets);\n}\n\n- (CGRect)editingRectForBounds:(CGRect)bounds{\n UIEdgeInsets contentInsets = UIEdgeInsetsMake(5, 30, 5, 30);\n return UIEdgeInsetsInsetRect(bounds, contentInsets);\n}\nRun Code Online (Sandbox Code Playgroud)