- 添加TextFile时,看不到时记得设置boardStyle属性
UITextField *textField = [[UITextField alloc] init];
textField.frame = CGRectMake(50, 40, 120, 40);
//设置boardStyle属性
textField.borderStyle = UITextBorderStyleRoundedRect;
[self.view addSubview:textField];
当两个或多个控制器的View为父子关系时,那么控制器也一定要为父子关系
设置tableView的组与组间的头部高度和尾部高度,可减小组间的间距
self.tableView.sectionFooterHeight = 10;
self.tableView.sectionHeaderHeight = 10;
tableView的footView的高度问题
tableView的footView只需要设置高度
自定义tableView的footView时要记得设置高度,否则没法与用户交互
自定义tableView的footView设置高度后会出现下面无法完全显示的bug,需要重新给footView高度赋值,或者设置footView的contentSize
快速获取沙盒路径
NSLog(@"%@", NSTemporaryDirectory());
scrollerView自动调整内边距属性 (导航控制器有导航条会有64的内边距)
//NO不自动调整内边距
self.automaticallyAdjustsScrollViewInsets = NO;
- layoutIfNeeded setNeedsLayout setNeedsDisplay的使用场景
//重新刷新自己和子控件的所有内容
[view layoutIfNeeded];
//重新排布子控件的frame
[view setNeedsLayout];
//重新调用drawRect方法
[view setNeedsDisplay];
- 简单设置按钮内部文字图片间距的方式
//contentEdgeInsets:会影响按钮内部的所有内容
button.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 10);
//imageEdgeInsets:只影响按钮内部的imageView
button.imageEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 10);
//titleEdgeInsets:只影响按钮内部的titleLable
button.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 10);
- 实现tableView组标题不悬浮效果
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView == self.tableView)
{
CGFloat sectionHeaderHeight = 25; //sectionHeaderHeight
if (scrollView.contentOffset.y <= sectionHeaderHeight&&scrollView.contentOffset.y >= 0) {
scrollView.contentInset = UIEdgeInsetsMake(-scrollView.contentOffset.y, 0, 0, 0);
} else if (scrollView.contentOffset.y >= sectionHeaderHeight) {
scrollView.contentInset = UIEdgeInsetsMake(-sectionHeaderHeight, 0, 0, 0);
}
}
}
- 实现UICollectionView组头、尾标题悬浮效果
sectionHeadersPinToVisibleBounds
sectionFootersPinToVisibleBounds
使用 NSUserDefaults 存储自定义对象:需要将自定义类型转换为NSData类型,然后将自定义类型数据存入 NSUserDefaults 中。相关学习
在使用tableview的tableHeaderView时,自定义xib时,会出现位置偏移或者会盖住下面的cell或不会随着tableview的滚动而滚动时等情况,这时候需要对tableHeaderView进行一下包装,先在本控制器添加一个view设置为tableHeaderView,然后将自定义的xib添加到这个view上即可
bounds补充:bounds是以自己控件的左上角为原点,bounds的大小就是偏移量content offset的值
通过xib创建cell的时候 xib中在View同一层级出现了其他的控件
"*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'invalid nib registered for identifier (Cell) - nib must contain exactly one top level object which must be a UITableViewCell instance'"
- 监听textView的return,使其退下键盘
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([text isEqualToString:@"\n"]) {
[textView resignFirstResponder];
return NO;
}
return YES;
}
- 使用xib的IBOutletCollection,数组有可能会无序,需要手动排序,我是对每个控件进行设置tag,然后进行排序
- (NSArray *)sortedArrayUsingComparator:(NSArray *)array{
return [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
if ([obj1 tag]< [obj2 tag]) return NSOrderedAscending;
else if ([obj1 tag] > [obj2 tag]) return NSOrderedDescending;
else return NSOrderedSame;
}];
}
- tableViewCell分隔线
// 添加分隔线
-(void)viewDidLayoutSubviews
{
if ([self.taskDetailTV respondsToSelector:@selector(setSeparatorInset:)]) {
[self.taskDetailTV setSeparatorInset:UIEdgeInsetsMake(0,0,0,0)];
}
if ([self.taskDetailTV respondsToSelector:@selector(setLayoutMargins:)]) {
[self.taskDetailTV setLayoutMargins:UIEdgeInsetsMake(0,0,0,0)];
}
}
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
- presentViewController跳转界面有时会有卡顿,需要开个异步线程
dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:nextVC animated:NO completion:^{
}];
});
- 移除所有子试图
[self.view.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
- tableview在iPad上显示不全问题,如下图:
解决方案:
if ([[UIDevice currentDevice].systemVersion doubleValue] >= 9.0)
{
self.xxxTableView.cellLayoutMarginsFollowReadableWidth = NO;
}
不断总结更新,欢迎补充……