建立一個iOS項目時可能遇到的問題

1.建立pch文件,pch文件在項目中的用處可以說是巨大的。首先,New file出一個pch文件,然后在Build Settings中搜索Prefix Header,找到Precompile Prefix Header將No改為YES,并且添加Prefix Header,$(SRCROOT)/項目名/CYOAPrefixHeader.pch(pch文件名),然后clean一下就好了。
2.LanchImage尺寸:
1125x2436 ------iPhone X——Portrait
iPhone Portrait iOS8,9———1242x2208(5.5寸)——750x1334(4.7寸)
iPhone Landscape iOS8,9 HD 5.5寸——2208x1242
iOS7-9 iPhone Portait 640x960(2x),640x1136(Retina 4)
iOS 7-9 iPad Portrait 768x1024(1x),1536x2048(2x)
iOS 7-9 iPad Landscape 1024x768(1x),2048x1536(2x)
iOS 5,6 iPhone Portrait 320x480(1x),640x960(2x),640x1136(Retina 4)
iOS 5,6 Without Status Bar iPad Portrait 768x1004(1x),1536x2008(2x)
iOS 5,6 iPad Portrait 768x1024(1x),1536x2048(2x)
iOS5,6 iPad Landscape Without Status Bar 1024x748(1x),2048x1496(2x)
iOS 5,6 iPad Landscape 1024x768(1x),2048x1536(2x)
3.請求數據的時候驗證證書,把之前iOS9的atns設置為No的刪掉就行了——HTTPS
4.打印nslog:

#ifdef DEBUG
#define NSLog(format, ...) printf("\n[%s] %s [第%d行] %s\n", __TIME__, __FUNCTION__, __LINE__, [[NSString stringWithFormat:format, ## __VA_ARGS__] UTF8String]);
#else
#define NSLog(format, ...)
#endif

5.iOS去掉導航欄和tabbar的上面的1px的橫線

[self.navigationController.navigationBar setBackgroudImage:[UIImage new]  forBarMetricsDefault];
[self.navigationController.navigationBar setShadowImage:[UIImage new]];
 去掉tabbar的橫線的方法:
1.自定義tabbarController
2.[self.tabBarController.tabBar setBackgroundImage:[UIImage new]];
[self.tabBarController.tabBar setShadowImage:[UIImage new]];

6./獲取拼音首字母(傳入漢字字符串, 返回大寫拼音首字母)

- (NSString *)firstCharactor:(NSString *)aString
{
    //轉成了可變字符串
    NSMutableString *str = [NSMutableString stringWithString:aString];
    //先轉換為帶聲調的拼音
    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);
    //再轉換為不帶聲調的拼音
    CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformStripDiacritics,NO);
    //轉化為大寫拼音
    NSString *pinYin = [str capitalizedString];
    //獲取并返回首字母
    return [pinYin substringToIndex:1];
}

7.今天在寫程序時候遇見layoutSubviews觸發時候引起的問題。特來總結一下什么時候會觸發layoutSubviews:
layoutSubviews在以下情況下會被調用:
1、init初始化不會觸發layoutSubviews
2、addSubview會觸發layoutSubviews
3、設置view的Frame會觸發layoutSubviews,當然前提是frame的值設置前后發生了變化
4、滾動一個UIScrollView會觸發layoutSubviews
5、旋轉Screen會觸發父UIView上的layoutSubviews事件
6、改變一個UIView大小的時候也會觸發父UIView上的layoutSubviews事件
8.app跳轉到appstore:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:iTunesLink]];
9.tableView,iOS7添加屬性separatorInset,設置為UIEdgeInsetsZero,即可分割線左對齊,但是iOS8之后還需要設置一個屬性layoutMargins,需要這兩個屬性都設置為UIEdgeInsetsZero。
10.button防止被重復點擊的方法:
1.在AppDelegate中寫

[[UIButton appearance] setExclusiveTouch:YES]

或者每新建一個button都寫

button.exclusiveTouch = YES

2.延遲調用:

    [[target class] cancelPreviousPerformRequestsWithTarget:target];
    [target performSelector:selector withObject:object afterDelay:0.2f];

3.把一個View的多點觸控關掉:

self.view.multipleTouchEnabled = YES;

4.當在一個類別中聲明一個屬性的時候,類別不會自動生成該屬性的set和get方法。這時就需要我們進行動態綁定,用到runtime的知識。

objc_setAssociatedObject(id _Nonnull object, const void * _Nonnull key,
                         id _Nullable value, objc_AssociationPolicy policy)
objc_getAssociatedObject(id _Nonnull object, const void * _Nonnull key)

這兩個方法一個是get一個是set。set方法中第一個參數是屬性綁定到的目標對象,第二個參數是一個靜態變量,相當于字典中的key,第三個參數是需要被綁定的對象,第四個參數是綁定策略。
get方法的第一個參數是被綁定的對象的目標對象,第二個參數是這個操作的key,通過key值取對象。
這兩個函數完全可以當成一個屬性的get和set方法一樣使用。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容