设置UITextView根据内容动态设置高度的简单方法,类似微信发朋友圈时的文本输入效果实现😁

设置UITextView根据内容动态设置高度的简单方法

 

今天给大家介绍的是设置UITextView根据内容动态设置高度,我用的是SDLayout的布局方式,方法很简单可以根据自己的布局方式做修改,直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
- (void)textViewTextDidChangeNotiAction:(NSNotification *)obj{
     
    UITextView *textView = (UITextView *)obj.object;
    if(textView == self.contentTextView){
         
        //获得textView的初始尺寸
        CGFloat width = CGRectGetWidth(self.contentTextView.frame);
        CGFloat height = CGRectGetHeight(self.contentTextView.frame);
        //获取当前内容下的textView的尺寸
        CGSize newSize = [self.contentTextView sizeThatFits:CGSizeMake(width,MAXFLOAT)];
         
        CGRect newFrame = self.contentTextView.frame;
         
       // newFrame.size = CGSizeMake(fmax(width, newSize.width), fmax(height, newSize.height));
        newFrame.size = CGSizeMake(newSize.width, newSize.height);
         
        LYLog(@"新高度:%f",newFrame.size.height);
         
        //self.contentTextView.frame = newFrame;
         
        self.contentTextView.sd_resetLayout
        .topSpaceToView(self, 10.f)
        .leftSpaceToView(self, 15.f)
        .rightSpaceToView(self, 15.f)
        .heightIs(newFrame.size.height);
         
        self.textNumLabel.sd_resetLayout
        .topSpaceToView(self.contentTextView,5.f)
        .rightSpaceToView(self, 15.f)
        .widthIs(100.f)
        .heightIs(20.f);
        [self.contentTextView updateLayout];
        self.inputText = self.contentTextView.text;
        if([self.contentTextView.text isEqualToString:@"这一刻的想法"]){
            self.inputText = @"";
        }else {
             
            if(self.contentTextView.text.length > 500){
                [self.contentTextView endEditing:YES];
                 
                [MBProgressHUD showText:@"内容不能超过500个字" toView:nil];
                 
                self.inputText = [self.contentTextView.text substringToIndex:500];
                self.contentTextView.text = self.inputText;
            }
        }
         
        self.textNumLabel.text = [NSString stringWithFormat:@"%lu/%lu",(unsigned long)self.inputText.length,500 - self.inputText.length];
         
        [self updateInputText];
         
        LYLog(@"输入的内容:%@",self.contentTextView.text);
    }
     
    [self setupAutoHeightWithBottomView:self.textNumLabel bottomMargin:10.f];
}

 效果如下图:

图一

图二

 

posted @   #零下一度&  阅读(526)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
历史上的今天:
2016-03-16 贝塞尔曲线(圆形进度显示)
点击右上角即可分享
微信分享提示