1.文本size的计算方法
1 NSDictionary *dict = @{NSFontAttributeName: NJTextFont}; 2 CGSize maxSize = CGSizeMake(200, MAXFLOAT); 3 CGSize textSize = [_message.text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil].size; 4 5 CGSize maxSize = CGSizeMake(200, MAXFLOAT); 6 CGSize textSize = [self sizeWithString:_message.text font:NJTextFont maxSize:maxSize];
2.将button设置完整背景图片
1.设置button的内边距
2.在button文本size加上内边距
3.使用resizeableImage方法拉伸图片
1 加载原有图片 2 UIImage *norImage = [UIImage imageNamed:imageName]; 3 获取原有图片的宽高的一半 4 CGFloat w = norImage.size.width * 0.5; 5 CGFloat h = norImage.size.height * 0.5; 6 生成可以拉伸指定位置的图片 7 UIImage *newImage = [norImage resizableImageWithCapInsets:UIEdgeInsetsMake(h, w, h, w) resizingMode:UIImageResizingModeStretch];
3.NSDate的用法
1 // 实现把当前时间作为发送时间 2 NSDate *date = [NSDate date]; // 创建时间对象 3 // NSLog(@"%@", date); 4 // 可以将时间转换为字符串 5 // 也可以将字符串转换为时间 6 // 2014-05-31 7 // 2014/05/31 8 // 05/31/2014 9 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 10 // HH 代表24小时 hh代表12小时 11 formatter.dateFormat = @"HH:mm"; 12 NSString *time = [formatter stringFromDate:date]; 13 14 NSLog(@"time = %@", time); 15 message.time = time;
4.监听键盘通知设置键盘与view改变位置
1 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChange:) name:UIKeyboardWillChangeFrameNotification object:nil];
1 /* 2 userInfo = { 3 // 键盘弹出的节奏 4 UIKeyboardAnimationCurveUserInfoKey = 7; 5 //键盘弹出执行动画的时间 6 UIKeyboardAnimationDurationUserInfoKey = "0.25"; UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {320, 216}}"; 7 UIKeyboardCenterBeginUserInfoKey = "NSPoint: {160, 588}"; 8 UIKeyboardCenterEndUserInfoKey = "NSPoint: {160, 372}"; 9 UIKeyboardFrameChangedByUserInteraction = 0; 10 UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 480}, {320, 216}}"; 11 12 // 键盘弹出时候的frame 13 UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 264}, {320, 216}}"; 14 15 // 键盘隐藏时候的frame 16 UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 480}, {320, 216}}"; 17 }} 18 19 */ 20 NSLog(@"键盘弹出 %@", notification); 21 22 /* 23 计算需要移动的距离 24 弹出的时候移动的值 = 键盘的Y值 – 控制view的高度 = 要移动的距离 25 - 480 = -216 26 27 隐藏的时候移动的值 = 键盘的Y值 - 控制view的高度 = 要移动的距离 28 480 - 480 = 0 29 */
改变view位置时不需要加入动画,系统已经实现
5.将tableview滚动到最后一行
// 2.刷新表格 [self.tableView reloadData]; // 3.让tableveiw滚动到最后一行 NSIndexPath *path = [NSIndexPath indexPathForRow:self.messages.count -1 inSection:0]; /* AtIndexPath: 要滚动到哪一行 atScrollPosition:滚动到哪一行的什么位置 animated:是否需要滚动动画 */ [self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionBottom animated:YES];
6.几个新方法
1 // 该方法在控件的frame被改变的时候就会调用 2 // 该方法一般用于调整子控件的位置 3 - (void)layoutSubviews 4 { 5 #warning 切记重写layoutSubviews方法一定要调用父类的layoutSubviews 6 [super layoutSubviews]; 7 // 1.设置按钮的frame 8 self.btn.frame = self.bounds; 9 // 2.设置label的frame 10 CGFloat padding = 20;// 间隙 11 CGFloat labelY = 0; 12 CGFloat labelH = self.bounds.size.height; 13 CGFloat labelW = 150; 14 CGFloat labelX = self.bounds.size.width - padding - labelW; 15 self.label.frame = CGRectMake(labelX, labelY, labelW, labelH); 16 }
/ 已经被添加到父视图上的时候会调用 - (void)didMoveToSuperview { // 在这个方法中就快要拿到最新的被添加到tableview上的头部视图修改它的图片 if (self.qqGroup.isOpen) { self.btn.imageView.transform = CGAffineTransformMakeRotation(M_PI_2); } } // 即将被添加到父视图上的时候会调用 - (void)willMoveToSuperview:(UIView *)newSuperview { // NSLog(@"willMoveToSuperview"); } // 设置btn中的图片不填充整个imageview btn.imageView.contentMode = UIViewContentModeCenter; // 超出范围的图片不要剪切 // btn.imageView.clipsToBounds = NO; btn.imageView.layer.masksToBounds = NO;