在代碼中使用NSLayoutConstaint
- 在創建約束之后,需要將其添加到作用的view上,添加規則如下:
- 父子控件 父控件 addConstraint
- 兄弟控件 它們的父控件 addConstraint
- 陌生控件 往上回溯,找到它們共同的祖先 addConstraint
- NSLayoutConstaint的7個參數:約束的控件、屬性、關系、參照控件、屬性、倍數、偏移常量
- 自動布局的核心計算公式
- obj1.property1 =(obj2.property2 * multiplier)+ constant value
- 使用代碼設置約束的時候,需要設置view.translatesAutoresizingMaskIntoConstraints = NO,拒絕將此控件的autoResizingMask 轉化為constraints,可能會造成沖突。在storyboard上設置約束,會自動設置此屬性。
- 添加約束之前,一定要保證相關控件都已經在各自的父控件上
- 不用再給view設置frame
- 使用addConstraints,可以將constraint組成數組批量增加
VFL 可視化標記語言Visual Format Language
- VFL 是蘋果公司為了簡化AutoLayout的編碼而推出的抽象語言
- 雖然代碼量少了一點,但是寫起來還是比較費勁;而且功能有限,需要配合NSLayoutContraint使用
- 示例
//objc
//使用VFL來創建約束數組
+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;
//format :VFL語句
//opts :約束類型
//metrics :VFL語句中用到的具體數值
//views :VFL語句中用到的控件
//創建一個字典(內部包含VFL語句中用到的控件)的快捷宏定義
NSDictionaryOfVariableBindings(...)
//在修改了約束之后,只要執行下面代碼,就能做動畫效果
[UIView animateWithDuration:1.0 animations:^{
[添加了約束的view layoutIfNeeded];
}];
Masonry第三方框架
這個框架很是簡便,易懂,看起來真是挺優雅的,推薦使用,而且其庫程序只有160K,比一張圖片的空間還小。
- 使用第三方框架,官方推薦使用cocoaPod;也可以深入文件里面,找到主文件夾,然后拷貝進自己的工程項目里面,就可以使用了。
- 默認情況下width是make對象的一個屬性,用來添加寬度約束用的,表示對寬度進行約束.
- mas_width是一個屬性值,用來當做equalTo的參數,表示某個控件的寬度屬性.
- .pch文件 precompliled header
- 所謂的預編譯頭文件,其實我們很熟悉的,這里的頭文件(Microsoft Visual C++中)一般的說就是我們常見的stdafx.h。這個名字是微軟默認的,名字還可以改,內容更加可以改。這個就是待編譯的頭文件,但是,我們知道,頭文件是不能被編譯的,因此,我們就可以用一個stdafx.cpp,這個文件中一開始可以沒有內容,但必須加一句“include<stdafx.h>”,然后compile(ctrl+F7)一下就可以出現一個(.pch)文件,這個就是我們常說的預編譯頭文件。
- 為什么需要預編譯頭文件呢?原因很簡單,這個其實這么做的目的就是減少編譯時間。因為,如果不是這么做的話,在編譯的時候,假如一個頭文件被很多的文件使用,那就費時了,因為得一次又一次地進行編譯。而有了預編譯頭文件的話,我們把出現頻率很高的那部分東西(通常是一些系統的頭文件或者是一些自己設定的但是不常變動的頭文件)已經編譯好了,就像一個通用零件一樣,已經搞好了,用到的時候就直接裝就行。這樣就可以利用編譯好的成果,從而能非常有效地節約編譯的時間了。
UITableView
- UITableView的兩種樣式:plain 與 grouped
- 將 tableView 呈現給用戶有三種方式:dataSource、delegate、tableView本身的屬性。
- 設置dataSource 的delegate 之后,自動調用數據源的代理所提供的方法;正如delegate 的delegate設置之后,當UITableView發生一系列的特定動作后,通知它的代理(delegate)對象,然后再執行代理中的方法。
tips
- XCode插件的使用
- itools工具,可以將手機上面的.ipa軟件包下載下來,進入到包里面,可以看清楚其app所使用的圖片,下次看到好看的圖標,可以直接拿過來借用了。
- objc \ swift 中是否存在2維數組? 答案:并不像C那樣使用[][]定義2維數組,在objc \ swift中定義嵌套數組。2維數組的本質就是1維數組。
//swift
//定義方式一
var array1 = [[Int]]()
//定義方式二
var array2 = Array<Array<Int>>()
array1 = [
[13,1,4],
[5,1,7,6]
]
array2 = array1
// 一維數組的定義
var v = [Int]()
v = [4,5,7,8]
array2.append(v)
print(array1)
print(array2)
//數組的遍歷
for var i=0; i<array1.count; i++ {
for var j=0; j<array1[i].count; j++ {
print(array1[i][j])
}
}
- 引用數據模型,少些代碼,直接修改必要的數據即可,而不需要去修改使用這些數據模型的方法,更加簡便。
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。