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评论回复功能实现
491 0
iOS评论回复功能实现
|
iOS开发
iOS 评论回复功能(新)
iOS 评论回复功能(新)
357 0
iOS 评论回复功能(新)
|
缓存 运维 监控
如何优化iOS系统上的图文评论UI界面
在我们的社交 APP 上,⽤户的动态由精美的照⽚ 、视频和⽂字组成。对于每张照⽚和视频, 我 们都会展示出完整的标题和五个最新评论。由于⽤户喜欢使⽤标题来讲述照⽚背后的故事, 因此它们通常很⻓ 、很复杂, 并且可能包含超链 接和表情符号。渲染如此复杂的⽂本带来了⼀些问题, 它在滚动时造成性能下降。 即使在 iPhone 12 这样的新设备上, 复杂标题的初始⽂本绘制需要⻓达 50 毫秒, ⽽⽂本展示 需要⻓达 30 毫秒, 渲染速度很慢。⽂本问题还是简单问题, 有时我们需要加载更加复杂的图⽚甚⾄视频。所有这些步骤都发⽣在 UI 线程上, 导致app在⽤户滚动时丢帧。
如何优化iOS系统上的图文评论UI界面
|
2月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
19天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
111 66
|
6天前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
30天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
1月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。