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评论回复功能实现
419 0
iOS评论回复功能实现
|
iOS开发
iOS 评论回复功能(新)
iOS 评论回复功能(新)
307 0
iOS 评论回复功能(新)
|
缓存 运维 监控
如何优化iOS系统上的图文评论UI界面
在我们的社交 APP 上,⽤户的动态由精美的照⽚ 、视频和⽂字组成。对于每张照⽚和视频, 我 们都会展示出完整的标题和五个最新评论。由于⽤户喜欢使⽤标题来讲述照⽚背后的故事, 因此它们通常很⻓ 、很复杂, 并且可能包含超链 接和表情符号。渲染如此复杂的⽂本带来了⼀些问题, 它在滚动时造成性能下降。 即使在 iPhone 12 这样的新设备上, 复杂标题的初始⽂本绘制需要⻓达 50 毫秒, ⽽⽂本展示 需要⻓达 30 毫秒, 渲染速度很慢。⽂本问题还是简单问题, 有时我们需要加载更加复杂的图⽚甚⾄视频。所有这些步骤都发⽣在 UI 线程上, 导致app在⽤户滚动时丢帧。
如何优化iOS系统上的图文评论UI界面
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
95 3
|
4月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
122 2
|
4月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
42 0
|
2月前
|
API 开发工具 Android开发
iOS 和 Android 平台的开发有哪些主要区别?
iOS与Android开发区别:iOS用Objective-C/Swift,App Store唯一下载渠道;Android用Java/Kotlin,多商店发布(如Google Play、华为市场)。设计上,iOS简洁一致,Android灵活可定制。开发工具,iOS用Xcode,Android用Android Studio。硬件和系统多样性,iOS统一,Android复杂。权限管理、审核流程及API各有特点,开发者需依据目标平台特性进行选择。
32 3
|
2天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
3天前
|
存储 Swift iOS开发
使用Swift开发一个简单的iOS应用的详细步骤。
使用Swift开发iOS应用的步骤包括:创建Xcode项目,设计界面(Storyboard或代码),定义数据模型,实现业务逻辑,连接界面和逻辑,处理数据存储(如Core Data),添加网络请求(必要时),调试与测试,根据测试结果优化改进,最后提交至App Store或其它平台发布。
11 0