我有一个textView,我在这个textView中添加了一个图像。当我写文字并转到下一行时,我想将此图像向下移动一行的大小。类似于在Twitter应用程序中创建带图片的推文时。在这段代码中,我可以逐行移动,但我的问题是它转移到了较晚(仅在下一行的第二个符号)。我试图在CGSizeMake中使用不同的值,但是线路过早或过晚..任何建议?
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range
replacementText:(NSString *)text
{
CGSize constrainedSize = CGSizeMake(self.textView.contentSize.width, self.textView.contentSize.height);
UIFont *fontText = [UIFont systemFontOfSize:17];
CGRect textRect = [textView.text boundingRectWithSize:constrainedSize
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:fontText}
context:nil];
size = textRect.size;
CGFloat height = ceilf(size.height);
CGFloat width = ceilf(size.width);
CGRect frame = CGRectMake(0.0f, height+50, 100.0f, 100);
_imageView.frame=frame;
return YES;
}
答案 0 :(得分:0)
您正在硬编码字体大小。也许文本字段有不同的字体。请改用textField.font
。
此外,您应该简化代码并消除未使用的变量,例如width
。
最后,您应该设置一个断点来计算大小并继续检查它是否正确。基于此,它应该很容易调试。
另请注意,textField.text
尚未包含要添加的文字。在检查大小之前,您必须先自己构造新生成的字符串。
NSString *newText = [textField.text
stringByReplacingCharactersInRange:range withString:text];
答案 1 :(得分:0)
我认为您应该将Image
subview
添加到superview
的{{1}}。
textView
符合shouldChangeTextInRange:
textView
content
textView
的{{1}}框架。
当textView
的框架发生变化时,只需使用 KVO 进行捕获。所以,现在你可以在textview的底部边框上保留图像的顶部边框,甚至是动画!
我不会代替你编写代码,但这听起来非常简单有趣,对吧?