事件冲突
- 解决scrollView的滑动事件与子视图按钮事件冲突
self.scrollView.panGestureRecognizer.delaysTouchesBegan = YES;
2.根控制器TabBarViewController的setSelectedIndex进行切换标签时,从标签的导航栈中跳转到其他标签时出现的问题,底部的tabbar隐藏?
因为需要先pop到导航栈的根视图,然后再切到其他标签。
pop方法一定不要使用动画,设置成NO,因为动画在标签切换时,未完成就会出现问题。
原理:设置成YES,此时pop操作会在动画执行完成之后,晚与标签切换,此时会隐藏掉tabbar。
[self.navigationController popToRootViewControllerAnimated:NO];
AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
[delegate.rootController setSelectedIndex:0];
3.使用Masonry进行适配scrollview时,因为无法通过CGSizeMake来设置它的contentSize,可以使用一个中间过渡view进行处理。
4.滑动时动态获取当期显示的是第几个section,在方法- (void)scrollViewDidScroll:(UIScrollView *)scrollView中获取
NSInteger section = [self.listView.tableView indexPathForRowAtPoint:CGPointMake(0, scrollView.contentOffset.y)].section;
5.更新单个cell时,经常将indexPath设置出错,解决方式根据Section来进行设置,既简单有直观,不容易出错
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:1 inSection:0];
[self.listView.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone];
6.设置按钮文字靠左对齐
// 设置UIButton字体居左显示
repostBtn.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
// 设置button的title就距左边10个像素的距离。
repostBtn.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0);
7.使用Masonry在给cell赋值时,动态更新lable的高度(使用了lable的宽度,而不是计算出来的宽度),发现frame没有发生改变?
原因是:计算高度时,lable的宽度为0,而不是真实的宽度。因为是使用Masonry进行的约束,然后查找原因发现,使用Masonry进行控件约束时,不是立即调用layoutSubviews进行布局更新,此时控件的frame都为0,需要调用layoutIfNeeded方法进行布局更新,调用了系统的layoutIfNeeded方法之后,就会执行layoutSubviews进行布局更新。
参考
8.编译报错
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
原因1:缺少支持的三方类库。
9.collection布局
设置cell距离屏幕两边间隔的时候,一定要在设置size时,宽度减去两边的间隔,然后再设置UIEdgeInsets属性即可。
CGFloat margin = (15);
CGFloat width = (kScreenW - margin - 40)*0.5; // 40是距离屏幕的间隔
CGFloat height = width * (11/8.0);
layout.itemSize = CGSizeMake(width,height);
// 设置内间距 top, left, bottom, right;
layout.sectionInset = UIEdgeInsetsMake(20, 20, 20, 20);
layout.minimumLineSpacing = margin; // 纵向Cell最小间距
layout.minimumInteritemSpacing = margin; // 横向Cell最小间距