UITextField 插入符号太大时停止移动
UITextField Caret stops moving around when too large
UITextField
允许您在子类中覆盖 -caretRectForPosition:
。我希望插入符号覆盖文本字段的整个高度。
- (CGRect)caretRectForPosition:(UITextPosition *)position
{
CGRect inherited = [super caretRectForPosition:position];
inherited.origin.y = -50.0;
inherited.size.height = 200.0;
return inherited;
}
但是,如果我将其设置得太大(如示例中所示),它将停止随放大镜四处移动,有效地使用户无法切换到文本的另一部分。
为什么会这样,我该如何解决这个问题?
我认为这只是在尝试使插入符比文本字段大时出现的问题。使其覆盖唯一的整个编辑矩形效果很好。
- (CGRect)caretRectForPosition:(UITextPosition *)position
{
CGRect const inherited = [super caretRectForPosition:position];
CGRect const rect = ({
CGRect rect = inherited;
rect.origin.y = 0.0;
rect.size.height = CGRectGetHeight([self editingRectForBounds:self.bounds]);
rect;
});
return rect;
}
奖励: 如果您试图让选择范围视图的高度相同,请查看 -selectionRectsForRange:
并调整所有视图的大小相应地纠正。不过,您需要子类化 UITextSelectionRect
以使其可变。
UITextField
允许您在子类中覆盖 -caretRectForPosition:
。我希望插入符号覆盖文本字段的整个高度。
- (CGRect)caretRectForPosition:(UITextPosition *)position
{
CGRect inherited = [super caretRectForPosition:position];
inherited.origin.y = -50.0;
inherited.size.height = 200.0;
return inherited;
}
但是,如果我将其设置得太大(如示例中所示),它将停止随放大镜四处移动,有效地使用户无法切换到文本的另一部分。
为什么会这样,我该如何解决这个问题?
我认为这只是在尝试使插入符比文本字段大时出现的问题。使其覆盖唯一的整个编辑矩形效果很好。
- (CGRect)caretRectForPosition:(UITextPosition *)position
{
CGRect const inherited = [super caretRectForPosition:position];
CGRect const rect = ({
CGRect rect = inherited;
rect.origin.y = 0.0;
rect.size.height = CGRectGetHeight([self editingRectForBounds:self.bounds]);
rect;
});
return rect;
}
奖励: 如果您试图让选择范围视图的高度相同,请查看 -selectionRectsForRange:
并调整所有视图的大小相应地纠正。不过,您需要子类化 UITextSelectionRect
以使其可变。