一句话笔记,某段时间内遇到或看到的某个可记录的点。 2016-12-27
- NavigationBar 隐藏的两个小细节
- 超出父视图的子视图响应事件
- objc-class-ref in 的BUG
一、 NavigationBar 隐藏的两个小细节
self.navigationController.navigationBar.hidden
&self.navigationController.navigationBarHidden
区别
// 对一个属性隐藏
self.navigationController.navigationBarHidden = YES;
// 对一个对象隐藏 (下一层次的页面 NavigationBar 直接不显示)
self.navigationController.navigationBar.hidden = YES;
一般建议还是用 .navigationBarHidden, 因为用 .navigationBar.hidden 会导致下一层次的NavigaitionBar 直接隐藏了,需要再重新设置,没必要。
- **
self.navigationController setNavigationBarHidden:
&self.navigationController setNavigationBarHidden: animated:
的不同点**
// Set 方法
[self.navigationController setNavigationBarHidden:YES];
// 可以解决隐藏后,下一阶滑动返回头部消失的丑陋情况
[self.navigationController setNavigationBarHidden:YES animated:YES];
有时我们在隐藏某个一个界面的导航栏,子界面 向右滑动 pop 回来时,会呈现上面缺失的丑的情况,用self.navigationController setNavigationBarHidden: animated:
则直接解决了这个问题。
二、超出父视图的子视图响应事件
有时我们设置视图时,会将其子视图移到在父视图外面,但这样外部的视图就不能响应点击事件,为此需要处理一下。其思路是遍历父视图的所有子视图,并判断触发事件的点是否在子视图的bounds内如果在就返回这个子视图。
// 此处的目的是让超出父视图的点击同样可以被响应到
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *view = [super hitTest:point withEvent:event];
if (!view) {
for (UIView *subView in self.subviews) {
CGPoint subPoint = [subView convertPoint:point fromView:self];
if (CGRectContainsPoint(subView.bounds, subPoint)) {
view = subView;
}
}
}
return view;
}
三、objc-class-ref in 的BUG
![](https://img.haomeiwen.com/i784630/c45a3f14adc646e2.png)
这个错误是我在切换模拟器时遇到的,平常第一反应以为是:
- 缺失了什么文件导致的
- 或者什么文件重叠了导致的。
具体症状:在 6,6P, 7,7P 上是好好的,跑到4s,5 上的模拟器就直接出现了这种情况,甚至 5s 都是好的。
同时问了一下其他小伙伴,发现他们是正常的,其中一个小伙伴用了 Command+Shift +K 之后也是可以正常编译的,我之前是用了很多遍的 Clear, 之后也试了很多遍Clear 还是没用的...
然后换了一种清理方式,直接去清理掉 DerivedData ,然后就好啦...
所以出现 objc-class-ref 的原因多了一个:缓存的影响,不单单是用 Command+Shift +K 而且要清理掉 DerivedData。
网友评论