gitHub地址:github.com/wangtongke/AutoFitLabel.git
如果是下面這種的
則比較容易實現。一種是通過動態計算label的寬度,九宮格創建。另外一種就是使用collectionView,重寫layout來實現,也就是一個橫向的瀑布流布局。推薦使用MSSAutoresizeLabelFlow,已經封裝好,創建時傳一個數組即可,點擊事件則通過block傳遞。創建方式如下
另外一種如下圖
這種就比較蛋疼了,橫向瀑布流用不了了。只能自己用九宮格寫。下面說一下要點及思路。
1、每行的字數、label個數都是不固定的,但是間距都是一定的,并且距離邊界都是一樣的。
2、每一個級別的高度也是不固定的,
3、上面點擊之后,下級會改變,所以還要考慮重用。
下面主要說一下九宮格創建。考慮到每行不能超過多少個字,或者不能多于幾個按鈕(這里設置的是18個字,6個按鈕),并且每行最少兩個。所以使用了雙重循環,第一層循環為遍歷整個數組,內嵌兩個循環,一個循環為while循環判斷每行不能超過18個字或者6個按鈕。另外一個循環創建btn。 ?
如下:
內部while循環
超過18個字或者大于6個就跳出循環,btnNum為本次循環所要創建的btn個數。
結束本次外部循環后,使i= j,然后再開始下一行的循環。
gitHub地址GitHub - wangtongke/AutoFitLabel: 自適應label布局,類似于歷史搜索列表
github上面只有下面這兩種布局。沒有多級聯動類的布局。
另外按鈕寬度根據文字計算,這個不在多說