iOS开发笔记(2) 关于Masonry包 Masonry就是一个自动布局框架,用起来很容易上手,也很方便。 官方给的源码例子:
1 2 3 4 5 6 7 UIEdgeInsets padding = UIEdgeInsetsMake(10, 10, 10, 10) [view1 mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(superview.mas_top).with.offset(padding.top) make.left.equalTo(superview.mas_left).with.offset(padding.left) make.bottom.equalTo(superview.mas_bottom).with.offset(-padding.bottom) make.right.equalTo(superview.mas_right).with.offset(-padding.right) }]
or even shorter:
1 2 3 [view1 mas_makeConstraints:^(MASConstraintMaker *make) { make.edges.equalTo(superview ) .with.insets(padding ) } ]
大于等于、小于等于:
1 2 make .width .greaterThanOrEqualTo (@200); make.width.lessThanOrEqualTo (@400 )
除此之外,我还发现了Masonry一个特别好用的方法:倍数
1 make .width .equalTo (self .view .mas_width ).multipliedBy (0.8 );
但是在用的过程中,我还是发现了一些问题:
使用了Masonry的相对布局后,好像无法获取控件的高度了
RadioButton也无法使用Masonry相对布局
使用Masonry相对布局之后,Label有的时候有些功能无效,比如lineBreakMode和numberOfLines。具体什么情况可以用什么情况无效还没有测试,只是有的时候会遇到这种情况。
Label换行 1 2 label .lineBreakMode = UILineBreakModeWordWrap;label .numberOfLines = 0 ;
点击空白处收回键盘 在init View的时候加上这几句代码即可:
1 2 3 4 self .userInteractionEnabled = YES ;UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector (fingerTapped:)];[self .view addGestureRecognizer:singleTap];
NSNumber NSNumber类型的要用@()括起来,比如@(3)
UIScrollView与其他view不同的是,要在最后设置一下contentSize:
1 self .scrollView .contentSize = CGSizeMake (width, height);
NSString 连接:
1 label.text = [model.grade stringByAppendingFormat:@" %@ %@ 字",@" ",model.letter_count];
去掉字符串中的换行回车:
1 NSString *str = [model.content stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]
whitespaceCharacterSet 去除空格
newlineCharacterSet 去除回车
whitespaceAndNewlineCharacterSet 去除空格和回车
图片名称大小写问题 图片名称如果是大写,代码中使用小写的时候,在模拟机上跑可以,但是真机上就不行了!
判断字符串是否为空 判断字符串是否为空的时候,我以前习惯用
[str isEqualToString@"" ]
但实际上有更好的办法:判断字符串的长度:
!str.length
Label attributedText 1 2 3 4 5 6 7 8 9 10 11 12 13 14 - (NSMutableAttributedString *)contentAttributedString:(NSString *)text { NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:text]; UIFont *font = [UIFont fontWithName:@"Heiti SC" size:16 ]; NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; style.lineBreakMode = NSLineBreakByWordWrapping ; style.lineSpacing = 4 ; style.paragraphSpacing = 0.5 * font.lineHeight ; style.hyphenationFactor = 1.0 ; style.alignment = NSTextAlignmentLeft ; [string addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange (0 ,string.length )]; [string addAttribute:NSFontAttributeName value:kSYSTEMFONT(16 ) range:NSMakeRange (0 ,string.length )]; return string; }
然后调用:
1 label.attributedText = [self contentAttributedString:contentLabel.text ]
点击空白处收回键盘 在init view的时候加入
1 2 3 4 self .userInteractionEnabled = YES ;UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector (fingerTapped:)];[self .view addGestureRecognizer:singleTap];
然后调用TextField的delegate:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 -(void )textFieldDidBeginEditing:(UITextField *)textField { CGFloat keyboardHeight = 240.0 f; if (self .view .frame .size .height - keyboardHeight > textField.frame .origin .y + textField.frame .size .height ){ } else { CGFloat moveHeight = textField.frame .origin .y - (self .view .frame .size .height - keyboardHeight - textField.frame .size .height ); [UIView beginAnimations:@"scrollView" context:nil ]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut ]; [UIView setAnimationDuration:0.275 f]; self .view .frame = CGRectMake (self .view .frame .origin .x , -moveHeight, self .view .frame .size .width , self .view .frame .size .height ); [UIView commitAnimations]; } } -(void )textFieldDidEndEditing:(UITextField *)textField { [UIView beginAnimations:@"scrollView" context:nil ]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut ]; [UIView setAnimationCurve:0.275 f]; self .view .frame = CGRectMake (self .view .frame .origin .x , 0 , self .view .frame .size .width , self .view .frame .size .height ); [UIView commitAnimations]; [self .textField resignFirstResponder]; }
但是会出现问题,就是自定义的NavigationBar也会上移,目前还不知道该怎么解决。以后深入研究一下~
其他需要注意的地方
self.currentHeight 最好使用CGFloat类型,虽然NSIngteger也可以
为button加tag的时候,tag的命名要规范,不要用数字,不然加pingback别人看不懂
.h文件最好不要import头文件,因为会增加编译时间。如果需要的话,可以用@class
类,然后再.m文件里import头文件
不要再使用!=0
这种东西了!!!
UItableView的delegate方法里,如果数组大小为0:
1 2 3 4 -(NSInteger )tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger )section { return self .array .count ; }
那么
1 2 3 - (UITableViewCell*)tableView :(UITableView *)tableView cellForRowAtIndexPath :(NSIndexPath *)indexPath { }
就不执行了。 所以没必要在上面那个方法中单独去判断self.array.count是否为0.