iOS: 自动增高的 textView
如 iPhone 内应用“信息”的输入框一样,输入文字过多或者输入换行,输入框可以随着内容自动变化。主要是计算内容的尺寸并相应更改输入框的frame。具体表现在:
- 更改输入框的 frame.origin.y;
- 更改输入框的高度。
两者的变化量是相同的。
为了能达到实时性,就要监听文字的变化,注册 UITextViewTextDidChangeNotification 的监听,并在合适的时候解除监听。
- (void)willMoveToSuperview:(UIView *)newSuperview { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChanged:) name:UITextViewTextDidChangeNotification object:nil]; } - (void)removeFromSuperview { [[NSNotificationCenter defaultCenter] removeObserver:self name:UITextViewTextDidChangeNotification object:nil]; }
在监听的方法中,更改 textView 的frame
- (void)textDidChanged:(NSNotification *)notif { CGSize contentSize = self.textView.contentSize; if (contentSize.height > 140) { return; } CGFloat minus = 3; CGRect selfFrame = self.frame; CGFloat selfHeight = self.textView.superview.frame.origin.y * 2 + contentSize.height - minus + 2 * 2; CGFloat selfOriginY = selfFrame.origin.y - (selfHeight - selfFrame.size.height); selfFrame.origin.y = selfOriginY; selfFrame.size.height = selfHeight; self.frame = selfFrame; }
在本例中,textView 是 self (UIView) 的 subView,并且设置好了 UIViewAutoresizingMask,所以更改 self.frame,变相地更改 textView.frame。
aTextView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现