仿QQ聊天布局--iOS
2014-06-24 12:06
183 查看
虽然注册博客园这么久了,但很少在这上面写些东西,一来也是觉得自己能力不够,二来怕误人子弟,所以一直秉着“多看,多做,少说”的原则混迹在各论坛之中。但日子久了,觉着这其实是一种逃避的方法。思来想去,那些牛逼的人其实是那些能把自己心中所想完全表达出来,让人看之舒服,听之认同的人。所以,除了“多看,多做,少说”外,怕要加一条“多总结”,否则恐要淹死在这信息化的浪潮中了。
最近对QQ、微信聊天布局产生兴趣,便搜索资料试着搞搞,趁着空隙,先上效果图,得空再补充说明。
![](http://images.cnitblog.com/i/379421/201406/241148064395373.jpg)
大致思路就是 自定义tableViewcell(包括imageView和UIButton),选用button是因为他既可以设置背景也可以显示文字,如果用Label只能显示文字。
下面是大致的框架:
![](http://images.cnitblog.com/i/379421/201406/241158104553136.jpg)
要解决的难点就是怎样实现让cell高度随着文本的大小显示,iOS7 摒弃了原来的sizeWithFont: constrainedToSize:lineBreakMode:方法,采用了boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context的方法,以及设置button的UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right)使文字在中间显示,当然还得解决背景图片的拉伸问题,关于拉伸的解决方法提供一个网址写得不错:/article/4834658.html。
添上本工程代码:
最近对QQ、微信聊天布局产生兴趣,便搜索资料试着搞搞,趁着空隙,先上效果图,得空再补充说明。
![](http://images.cnitblog.com/i/379421/201406/241148064395373.jpg)
大致思路就是 自定义tableViewcell(包括imageView和UIButton),选用button是因为他既可以设置背景也可以显示文字,如果用Label只能显示文字。
下面是大致的框架:
![](http://images.cnitblog.com/i/379421/201406/241158104553136.jpg)
要解决的难点就是怎样实现让cell高度随着文本的大小显示,iOS7 摒弃了原来的sizeWithFont: constrainedToSize:lineBreakMode:方法,采用了boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context的方法,以及设置button的UIEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right)使文字在中间显示,当然还得解决背景图片的拉伸问题,关于拉伸的解决方法提供一个网址写得不错:/article/4834658.html。
添上本工程代码:
// 按钮的文本 NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:kUIFontSize]}; CGSize maximumLabelSize = CGSizeMake(180, MAXFLOAT); CGRect size = [message.message boundingRectWithSize:maximumLabelSize options:(NSStringDrawingUsesLineFragmentOrigin) attributes:attributes context:nil]; // 2) 设置文字按钮的文本 NSLog(@"%@ %@", NSStringFromCGSize(size.size), message.message); // 3) 设置文字按钮的大小和位置 CGFloat x = 0; if (message.fromSelf) { x = 250 - 10 - size.size.width - 40; // NSLog(@"x = %f",x); } else { x = 80; } // 增加消息按钮的外间距 [self.massage setContentEdgeInsets:UIEdgeInsetsMake(5, 20,10, 20)]; self.massage.frame = CGRectMake(x, 10, size.size.width + 20, size.size.height + 20); [self.massage setTitle:message.message forState:UIControlStateNormal]; // 按钮的背景 UIImage *nomalImg; UIImage *highImg; if(message.fromSelf) { nomalImg = [UIImage imageNamed:@"chatto_bg_normal"]; highImg = [UIImage imageNamed:@"chatto_bg_focused"]; }else { nomalImg = [UIImage imageNamed:@"chatfrom_bg_normal"]; highImg = [UIImage imageNamed:@"chatfrom_bg_focused"]; } // 拉伸图像 nomalImg = [nomalImg stretchableImageWithLeftCapWidth:nomalImg.size.width * 0.5 topCapHeight:nomalImg.size.height *0.6]; highImg = [highImg stretchableImageWithLeftCapWidth:highImg.size.width * 0.5 topCapHeight:highImg.size.height *0.6]; [self.massage setBackgroundImage:nomalImg forState:UIControlStateNormal ]; [self.massage setBackgroundImage:highImg forState:UIControlStateHighlighted];
相关文章推荐
- 猫猫学IOS(十八)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
- QQ聊天界面的布局和设计(IOS篇)-第二季
- iOS UI基础-10.0 QQ聊天布局之键盘及文本使用
- QQ聊天界面的布局和设计(IOS篇)-第一季
- 猫猫学IOS(十八)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
- AJ学IOS(18)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
- (素材源码)猫猫学IOS(十八)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
- QQ聊天界面的布局和设计(IOS篇)-第二季
- (素材源码)猫猫学IOS(十八)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
- 【iOS开发-65】QQ聊天界面案例:自定义cell、图片拉伸处理、NSNotification通知、键盘与视图移动以及输入框左边缩进处理
- IOS详解TableView——对话聊天布局的实现
- QQ聊天布局——利用通知机制实现键盘处理
- IOS开发学习笔记043-QQ聊天界面实现
- 制作高仿QQ的聊天系统(上)—— 布局文件 & 减少过度绘制
- ios-day08-01(模仿QQ聊天界面。ios通知的使用(对键盘状态的监听)、枚举和分类的使用、拉伸图片、计算文本字符串的尺寸
- iOS应用跳转qq指定联系人聊天
- ios版qq聊天记录的导出
- Android,iOS移动端打开手机QQ的指定用户聊天界面
- android ios中代码打开qq与指定号码的人聊天
- Android,iOS打开手机QQ与指定用户聊天界面