一句話筆記,某段時間內(nèi)遇到或看到的某個可記錄的點。 2016-12-27
- NavigationBar 隱藏的兩個小細(xì)節(jié)
- 超出父視圖的子視圖響應(yīng)事件
- objc-class-ref in 的BUG
一、 NavigationBar 隱藏的兩個小細(xì)節(jié)
self.navigationController.navigationBar.hidden
&self.navigationController.navigationBarHidden
區(qū)別
// 對一個屬性隱藏
self.navigationController.navigationBarHidden = YES;
// 對一個對象隱藏 (下一層次的頁面 NavigationBar 直接不顯示)
self.navigationController.navigationBar.hidden = YES;
一般建議還是用 .navigationBarHidden, 因為用 .navigationBar.hidden 會導(dǎo)致下一層次的NavigaitionBar 直接隱藏了,需要再重新設(shè)置,沒必要。
- **
self.navigationController setNavigationBarHidden:
&self.navigationController setNavigationBarHidden: animated:
的不同點**
// Set 方法
[self.navigationController setNavigationBarHidden:YES];
// 可以解決隱藏后,下一階滑動返回頭部消失的丑陋情況
[self.navigationController setNavigationBarHidden:YES animated:YES];
有時我們在隱藏某個一個界面的導(dǎo)航欄,子界面 向右滑動 pop 回來時,會呈現(xiàn)上面缺失的丑的情況,用self.navigationController setNavigationBarHidden: animated:
則直接解決了這個問題。
二、超出父視圖的子視圖響應(yīng)事件
有時我們設(shè)置視圖時,會將其子視圖移到在父視圖外面,但這樣外部的視圖就不能響應(yīng)點擊事件,為此需要處理一下。其思路是遍歷父視圖的所有子視圖,并判斷觸發(fā)事件的點是否在子視圖的bounds內(nèi)如果在就返回這個子視圖。
// 此處的目的是讓超出父視圖的點擊同樣可以被響應(yīng)到
- (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
錯誤顯示
這個錯誤是我在切換模擬器時遇到的,平常第一反應(yīng)以為是:
- 缺失了什么文件導(dǎo)致的
- 或者什么文件重疊了導(dǎo)致的。
具體癥狀:在 6,6P, 7,7P 上是好好的,跑到4s,5 上的模擬器就直接出現(xiàn)了這種情況,甚至 5s 都是好的。
同時問了一下其他小伙伴,發(fā)現(xiàn)他們是正常的,其中一個小伙伴用了 Command+Shift +K 之后也是可以正常編譯的,我之前是用了很多遍的 Clear, 之后也試了很多遍Clear 還是沒用的...
然后換了一種清理方式,直接去清理掉 DerivedData ,然后就好啦...
所以出現(xiàn) objc-class-ref 的原因多了一個:緩存的影響,不單單是用 Command+Shift +K 而且要清理掉 DerivedData。