淺析實現平鋪排列多個View的效果
iPhone的螢幕規格越來越多,適配起來也要花一些時間
下面是我做起來的效果
在搜尋歷史的功能裡是用的比較多的
實現的程式碼也很簡單 不用用CollectionView 也可以實現
- (void)initUICalculateContentHeightWithTagsArr:(NSArray *)tags maxWidth:(CGFloat)maxWidth labelHeight:(CGFloat)labelHeight clearanceWidth:(CGFloat)cw clearanceHeight:(CGFloat)ch font:(NSInteger )font sampleLabel:(UILabel *)sampleLabel {
//初始總高度
CGFloat allHeight = 2*ch + labelHeight;
CGFloat X = cw;
CGFloat Y = ch;
NSInteger count = tags.count;
count>5?(count=5):(count=count);
for (NSInteger i = 0; i < count; i++) {
CGSize size = [tags[i][@"tag_name"] mm_sizeWithFont:[UIFont systemFontOfSize:font] constrainedToSize:CGSizeMake(MAXFLOAT, labelHeight)];
size.width +=16;
size.width = MIN(maxWidth, size.width);
UILabel * l = [[UILabel alloc]init];
l.text = tags[i][@"tag_name"];
l.font = sampleLabel.font;
l.backgroundColor = sampleLabel.backgroundColor;
l.textColor = sampleLabel.textColor;
l.layer.cornerRadius = 3;
l.layer.masksToBounds = YES;
l.textAlignment = NSTextAlignmentCenter;
l.tag = 1000+i;
if ((X + size.width + cw) > maxWidth) {
X = cw;
Y = Y + ch + labelHeight;
allHeight = allHeight + ch + labelHeight;
}
//不取整 會有線
l.frame = CGRectIntegral( CGRectMake(X, Y-ch, size.width, labelHeight) );
X = X + size.width + cw;
[self addSubview:l];
}
}
這裡有個bug就是如果寬高不取整的話 會有一條黑線出來 用CGRectIntegral() 就可以解決了。
相關文章
- threejs紋理平鋪實現地面效果JS
- jquery實現的背景圖鋪滿全屏效果jQuery
- WebSocket 實現原理淺析Web
- hashmap實現原理淺析HashMap
- DOM 和 Canvas 如何實現文字豎向排列的效果Canvas
- 直播平臺原始碼,多種方法實現圖片複雜排列原始碼
- 淺析weak指標的實現指標
- Flutter動畫實現原理淺析Flutter動畫
- NX實現機制淺析
- Netty 實現原理淺析Netty
- 淺析malloc()的幾種實現方式
- Android 圖片平鋪實現方式Android
- 直播平臺原始碼,Android自定義View實現呼吸燈效果原始碼AndroidView
- 實現一個炫酷的隨機標籤排列效果(顏色隨機,大小隨機,成菱形排列的列表)隨機
- 前端動畫實現以及原理淺析前端動畫
- hashmap與Hashtable實現原理淺析HashMap
- HandyJSON實現方案淺析JSON
- 淺析CAS操作與JAVA實現Java
- 淺析pplx庫的設計與實現。
- 淺析Linux的軟中斷的實現Linux
- java多型性淺析Java多型
- AnalyticDB實現和特點淺析
- Spring MVC實現過程淺析SpringMVC
- 淺析redux-saga實現原理Redux
- 實現將10個整數升序排列
- JAVA 的多執行緒淺析(轉)Java執行緒
- 在多個遊戲檢視間切換實現效果遊戲
- viewpager實現畫廊(一屏多個Fragment)效果ViewpagerFragment
- Android自定義View實現文字輪播效果AndroidView
- iOS應用程式的脫殼實現原理淺析iOS
- Java實現-全排列Java
- 實現一個Material效果的ProgressBar
- 例2.4 使用列表推導式實現巢狀列表的平鋪巢狀
- Flutter 實現類似美團外賣店鋪頁面滑動效果Flutter
- DIFF演算法淺析(三)在react中的實現演算法React
- 淺析Spring中AOP的實現原理——動態代理Spring
- 淺析Ajax跨域原理及JQuery中的實現分析跨域jQuery
- 淺析 React / Vue 跨端渲染原理與實現ReactVue跨端