iOS搜索热词实现

iOS搜索热词实现github链接

例图

需求中需要实现搜索页面展示搜索热词。
遇到的主要问题是:词汇如何进行换行,以及自身高度的适应。

///button 文字两边空隙 
CGFloat const btnEnhanceW = 24;
///button 左右之间间距
CGFloat const btnMargin = 15;
///button 上下间距
CGFloat const btnMarginTB = 10;
///button 高度
CGFloat const btnH = 22; `

遍历数据源添加button
通过计算行宽与容器宽度进行比较,来确定需不需要换行

CGFloat btnW = button.bounds.size.width + btnEnhanceW + btnMargin;
  tempSum += btnW;
 if (tempSum < self.bounds.size.width + btnMargin ) {
    [btnsArr addObject:button];
 }else{
    tempSum = btnW;
    btnsArr = [NSMutableArray array];
    [btnsArr addObject:button];
    [_rowsContainer addObject:btnsArr];
 }

button初始化完成后,开始布局。

 CGFloat btnY = 0;
 for (int index = 0;index < self.rowsContainer.count; index++) {
     NSArray<UIButton *> *btnsArr = self.rowsContainer[index];
     if (index == 0) {
         btnY = 15;
     }else {
         btnY = 15 + (btnH + btnMarginTB) * index;
     }
     for (int i = 0; i < btnsArr.count; i++) {
         UIButton *button = (UIButton *)[btnsArr objectAtIndex:i];
         [button sizeToFit];
         if (i == 0) {
             button.frame = CGRectMake(0, btnY, button.bounds.size.width + btnEnhanceW, btnH);
         }else {
             button.frame = CGRectMake(CGRectGetMaxX(btnsArr[i - 1].frame) + btnMargin, btnY, button.bounds.size.width + btnEnhanceW, btnH);
         }
        if (index == self.rowsContainer.count - 1 && i == btnsArr.count - 1)  {
         _selfHeight = CGRectGetMaxY(button.frame);
     }
   }
 }

- (void)setFrame:(CGRect)frame {
     [super setFrame:frame];
    _selfFrame = frame;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,049评论 25 709
  • 为什么起了这个题目,因为我就是反面的活教材。 小时候被我爸许诺得了奖状回来,有100元奖励。当我第一次得了奖状,还...
    人生留白_81e6阅读 1,797评论 43 28
  • 信仰是一个非常有价值非常可贵的词,它意义深厚。 我认为驯养是一:建立关系,例如:你中了一朵玫瑰花,你每天都为它浇水...
    蜜糖吖阅读 242评论 0 1
  • 一, 高德地图的。 系统配置: TARGETS/Build Settings/搜索 bridging/ Objec...
    plantAtree_dAp阅读 880评论 6 0
  • 使用的是苹果tv4, 系统为tvos 10.x 比较 笔者用的盒子不多, 安卓的有小米1, 小米1s, 大麦盒子,...
    Zszen阅读 3,777评论 0 50