iOS 代码添加的UITextField编辑时文本未滚动至光标位置
解决代码创建UITextField无法滚动显示超长文本的问题
我之前也踩过这个坑!代码手动创建的UITextField有时候确实不会像Storyboard里拖的那样自动滚动显示超出的文本,其实只要检查并设置几个关键属性就能解决:
禁用自动缩小字体:如果你的UITextField开启了
adjustsFontSizeToFitWidth = true,系统会优先缩小字体来适应宽度,而不是滚动文本。所以要把这个属性设为false:textField.adjustsFontSizeToFitWidth = falseObjective-C版本:
textField.adjustsFontSizeToFitWidth = NO;确认滚动功能开启:虽然UITextField默认
isScrollEnabled是true,但有时候可能在代码里被意外覆盖了,手动设置一下确保没问题:textField.isScrollEnabled = trueObjective-C版本:
textField.scrollEnabled = YES;检查裁剪和对齐设置:确保
clipsToBounds设为true(默认是true,但如果之前修改过要改回来),这样超出边界的文本会被裁剪,同时触发滚动;另外contentHorizontalAlignment建议设为.left(默认也是左对齐,但如果设成了居中或者右对齐,滚动逻辑可能会受影响):textField.clipsToBounds = true textField.contentHorizontalAlignment = .leftObjective-C版本:
textField.clipsToBounds = YES; textField.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
如果做完以上设置还是不行,那可以检查一下UITextField的布局约束/frame是否正确——比如有没有给它设置固定的宽度,确保它的显示区域是明确的,没有被拉伸到能容纳所有文本的宽度(那样自然不会触发滚动)。
举个完整的Swift示例代码:
let textField = UITextField(frame: CGRect(x: 20, y: 100, width: 200, height: 40)) textField.borderStyle = .roundedRect textField.adjustsFontSizeToFitWidth = false textField.isScrollEnabled = true textField.clipsToBounds = true textField.contentHorizontalAlignment = .left view.addSubview(textField)
这样创建的UITextField就会和Storyboard里默认的一样,当输入文本超出宽度时自动向左滚动,让你能看到正在输入的内容啦!
内容的提问来源于stack exchange,提问作者DJ-Glock
相关产品推荐
相关产品推荐

