iOS动态高度评论框

简介: iOS动态高度评论框

核心代码:


import "HCTextView.h"
import "UIView+CLKAddition.h"
#import "Masonry.h"
#define ScreenWidth  [UIScreen mainScreen].bounds.size.width
#define WIDTH  ScreenWidth/375
@implementation HCTextView
{
float _currentLineNum;
}
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor colorWithHexString:@"#E6E6E6"];
_currentLineNum=1;//默认文本框显示一行文字
[self addSubviews];
}
return self;
}
- (void)addSubviews{
self.commentField = [[UITextView alloc]init];
self.commentField.backgroundColor = [UIColor colorWithHexString:@"#f8f8f8"];
self.commentField.font = [UIFont systemFontOfSize:12];
self.commentField.text = @"|说说你的看法~";
self.commentField.textColor = [UIColor colorWithHexString:@"#a0a0a0"];
self.commentField.layer.cornerRadius = 4;
self.commentField.layer.masksToBounds = YES;
[self addSubview:self.commentField];
self.commentField.contentInset = UIEdgeInsetsMake(-66,0,0,0);
self.commentField.delegate = self;
self.publishBtn = [[UIButton alloc]init];
[self.publishBtn setTitle:@"发布" forState:UIControlStateNormal];
[self.publishBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[self.publishBtn setBackgroundColor:[UIColor colorWithHexString:@"23aBec"]];
self.publishBtn.layer.cornerRadius = 2;
self.publishBtn.layer.masksToBounds = YES;
[self addSubview:self.publishBtn];
}
-(void)layoutSubviews{
[super layoutSubviews];
[self.publishBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(80*WIDTH, 32));
make.right.equalTo(@-10);
make.bottom.equalTo(@-8);
}];
[self.commentField mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(@10);
make.right.equalTo(self.publishBtn.mas_left).offset(-10);
make.centerY.mas_equalTo(self);
make.height.greaterThanOrEqualTo(@26);
}];
}
#pragma mark - UITextViewDelegate
- (void)textViewDidBeginEditing:(UITextView *)textView {
if ([textView.text isEqualToString:@"|说说你的看法~"]) {
textView.text = @"";
self.commentField.textColor = [UIColor colorWithHexString:@"#646464"];
self.commentField.contentInset = UIEdgeInsetsMake(2,0,-2,0);
}
}
- (void)textViewDidEndEditing:(UITextView *)textView {
if (textView.text.length<1) {
textView.text = @"|说说你的看法~";
textView.textColor = [UIColor colorWithHexString:@"#a0a0a0"];
}
self.commentField.contentInset = UIEdgeInsetsMake(2,0,-2,0);
}
-(void)textViewDidChange:(UITextView *)textView{
float textViewWidth=textView.frame.size.width;//取得文本框高度
NSString *content=textView.text;
NSDictionary *dict=@{NSFontAttributeName:[UIFont systemFontOfSize:12.0]};
CGSize contentSize=[content sizeWithAttributes:dict];//计算文字长度
float numLine=ceilf(contentSize.width/textViewWidth); //计算当前文字长度对应的行数
if (numLine>10) {
numLine=10;
}
CGFloat heightText = 14;
if (numLine != 0) {
if (numLine>_currentLineNum) {
self.frame = CGRectMake(self.frame.origin.x,self.frame.origin.y-heightText*(numLine-_currentLineNum), ScreenWidth, self.frame.size.height+heightText*(numLine-_currentLineNum));
[self.commentField mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.equalTo(@(self.commentField.frame.size.height+heightText*(numLine-_currentLineNum)));
}];
_currentLineNum=numLine;
}else if(numLine<_currentLineNum){
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y-heightText*(numLine-_currentLineNum), ScreenWidth, self.frame.size.height+heightText*(numLine-_currentLineNum));
[self.commentField mas_updateConstraints:^(MASConstraintMaker *make) {
make.height.equalTo(@(self.commentField.frame.size.height+heightText*(numLine-_currentLineNum)));
}];
_currentLineNum=numLine;
}
}
}
@end


2466108-ccbce6ca0d393355.webp.jpg

目录
相关文章
|
iOS开发
iOS评论回复功能实现
iOS评论回复功能实现
484 0
iOS评论回复功能实现
|
iOS开发
iOS 评论回复功能(新)
iOS 评论回复功能(新)
347 0
iOS 评论回复功能(新)
|
缓存 运维 监控
如何优化iOS系统上的图文评论UI界面
在我们的社交 APP 上,⽤户的动态由精美的照⽚ 、视频和⽂字组成。对于每张照⽚和视频, 我 们都会展示出完整的标题和五个最新评论。由于⽤户喜欢使⽤标题来讲述照⽚背后的故事, 因此它们通常很⻓ 、很复杂, 并且可能包含超链 接和表情符号。渲染如此复杂的⽂本带来了⼀些问题, 它在滚动时造成性能下降。 即使在 iPhone 12 这样的新设备上, 复杂标题的初始⽂本绘制需要⻓达 50 毫秒, ⽽⽂本展示 需要⻓达 30 毫秒, 渲染速度很慢。⽂本问题还是简单问题, 有时我们需要加载更加复杂的图⽚甚⾄视频。所有这些步骤都发⽣在 UI 线程上, 导致app在⽤户滚动时丢帧。
如何优化iOS系统上的图文评论UI界面
|
1月前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
112 1
|
1月前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
1月前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
64 1
|
10天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
32 9
|
9天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。
|
8天前
|
iOS开发 开发者
探索iOS开发中的SwiftUI框架
【10月更文挑战第39天】在苹果的生态系统中,SwiftUI框架以其声明式语法和易用性成为开发者的新宠。本文将深入SwiftUI的核心概念,通过实际案例展示如何利用这一框架快速构建用户界面,并探讨其对iOS应用开发流程的影响。