<u id="rnvt2"><dl id="rnvt2"></dl></u>

            1. <mark id="rnvt2"></mark>
            <source id="rnvt2"></source><u id="rnvt2"><sub id="rnvt2"></sub></u>

            1. <u id="rnvt2"><small id="rnvt2"></small></u>

            2. <u id="rnvt2"></u>
            3. 幫助與文檔
              熱搜關鍵詞:直播系統短視頻源碼一對一
              云豹短視頻app源碼中,標簽選擇功能的實現
              發布來源:云豹科技    發布人:云豹科技    Date:2021-05-26 10:05:53

              在國內任意短視頻app中,都能夠看到“貼標簽功能”,云豹短視頻app源碼作為緊跟行業潮流的成品商業源碼,自然也有該功能的實現,在云豹短視頻app源碼中,標簽選擇功能的實現要求是這樣的——

              短視頻app源碼標簽選擇功能的實現要求:

              1、 所有標簽顯示在下方,被選擇的標簽出現在上方,且在下方顯示“被選中狀態”,被選中的標簽再次點擊可取消,同時底部取消選中狀態。
              2、 標簽的寬度自適應,顯示不全自行判斷折行展示
              3、 若顯示標簽過多,超出上下邊界,則支持滑動展現

              實現效果圖如下:


              image.png


              通過短視頻源碼進行功能實現:


              -(CGSize)intrinsicContentSize {
                  if (!self.tags.count) {
                      return CGSizeZero;
                  }
                  
                  NSArray *subviews = self.subviews;
                  UIView *previousView = nil;
                  CGFloat topPadding = self.padding.top;
                  CGFloat bottomPadding = self.padding.bottom;
                  CGFloat leftPadding = self.padding.left;
                  CGFloat rightPadding = self.padding.right;
                  CGFloat itemSpacing = self.interitemSpacing;
                  CGFloat lineSpacing = self.lineSpacing;
                  CGFloat currentX = leftPadding;
                  CGFloat intrinsicHeight = topPadding;
                  CGFloat intrinsicWidth = leftPadding;
                  
                  if (!self.singleLine && self.preferredMaxLayoutWidth > 0) {
                      NSInteger lineCount = 0;
                      for (UIView *view in subviews) {
                          CGSize size = view.intrinsicContentSize;
                          // 寬度和高度通過參數的0或者非0來進行賦值
                          CGFloat width = self.isIntrinsicWidth?self.regularWidth:size.width;
                          CGFloat height = self.isIntrinsicHeight?self.regularHeight:size.height;
                          if (previousView) {
              //                CGFloat width = size.width;
                              currentX += itemSpacing;
                              if (currentX + width + rightPadding <= self.preferredMaxLayoutWidth) {
                                  currentX += width;
                              } else {
                                  lineCount ++;
                                  currentX = leftPadding + width;
                                  intrinsicHeight += height;
                              }
                          } else {
                              lineCount ++;
                              intrinsicHeight += height;
                              currentX += width;
                          }
                          previousView = view;
                          intrinsicWidth = MAX(intrinsicWidth, currentX + rightPadding);
                      }
                      
                      intrinsicHeight += bottomPadding + lineSpacing * (lineCount - 1);
                  } else {
                      for (UIView *view in subviews) {
                          CGSize size = view.intrinsicContentSize;
                          intrinsicWidth += self.isIntrinsicWidth?self.regularWidth:size.width;
                      }
                      intrinsicWidth += itemSpacing * (subviews.count - 1) + rightPadding;
                      intrinsicHeight += ((UIView *)subviews.firstObject).intrinsicContentSize.height + bottomPadding;
                  }
                  
                  return CGSizeMake(intrinsicWidth, intrinsicHeight);
              }
               
              - (void)layoutSubviews {
                  if (!self.singleLine) {
                      self.preferredMaxLayoutWidth = self.frame.size.width;
                  }
                  
                  [super layoutSubviews];
                  
                  [self layoutTags];
              }
               
              #pragma mark - Custom accessors
               
              - (NSMutableArray *)tags {
                  if(!_tags) {
                      _tags = [NSMutableArray array];
                  }
                  return _tags;
              }
               
              - (void)setPreferredMaxLayoutWidth: (CGFloat)preferredMaxLayoutWidth {
                  if (preferredMaxLayoutWidth != _preferredMaxLayoutWidth) {
                      _preferredMaxLayoutWidth = preferredMaxLayoutWidth;
                      _didSetup = NO;
                      [self invalidateIntrinsicContentSize];
                  }
              }
               
              #pragma mark - Private
               
              - (void)layoutTags {
                  if (self.didSetup || !self.tags.count) {
                      return;
                  }
                  
                  NSArray *subviews = self.subviews;
                  UIView *previousView = nil;
                  CGFloat topPadding = self.padding.top;
                  CGFloat leftPadding = self.padding.left;
                  CGFloat rightPadding = self.padding.right;
                  CGFloat itemSpacing = self.interitemSpacing;
                  CGFloat lineSpacing = self.lineSpacing;
                  CGFloat currentX = leftPadding;
                  
                  if (!self.singleLine && self.preferredMaxLayoutWidth > 0) {
                      for (UIView *view in subviews) {
                          CGSize size = view.intrinsicContentSize;
                          CGFloat width1 = self.isIntrinsicWidth?self.regularWidth:size.width;
                          CGFloat height1 = self.isIntrinsicHeight?self.regularHeight:size.height;
                          if (previousView) {
              //                CGFloat width = size.width;
                              currentX += itemSpacing;
                              if (currentX + width1 + rightPadding <= self.preferredMaxLayoutWidth) {
                                  view.frame = CGRectMake(currentX, CGRectGetMinY(previousView.frame), width1, height1);
                                  currentX += width1;
                              } else {
                                  CGFloat width = MIN(width1, self.preferredMaxLayoutWidth - leftPadding - rightPadding);
                                  view.frame = CGRectMake(leftPadding, CGRectGetMaxY(previousView.frame) + lineSpacing, width, height1);
                                  currentX = leftPadding + width;
                              }
                          } else {
                              CGFloat width = MIN(width1, self.preferredMaxLayoutWidth - leftPadding - rightPadding);
                              view.frame = CGRectMake(leftPadding, topPadding, width, height1);
                              currentX += width;
                          }
                          
                          previousView = view;
                      }
                  } else {
                      for (UIView *view in subviews) {
                          CGSize size = view.intrinsicContentSize;
                          view.frame = CGRectMake(currentX, topPadding, self.isIntrinsicWidth?self.regularWidth:size.width, self.isIntrinsicHeight?self.regularHeight:size.height);
                          currentX += self.isIntrinsicWidth?self.regularWidth:size.width;
                          
                          previousView = view;
                      }
                  }
                  
                  self.didSetup = YES;


              由此,短視頻app源碼中標簽選擇功能的實現教程到此結束,更多相關教程請關注云豹科技,如需購買短視頻app源碼,歡迎聯系云豹科技,云豹科技不斷更新短視頻app源碼,更新日志官網可查。

              聲明:以上內容為云豹科技作者本人原創,未經作者本人同意,禁止轉載,否則將追究相關法律責任www.radissonsedona.com

              本文標簽: 短視頻app源碼
              男人和女人高潮免费网站_国产熟女高潮视频_精品国产美女福到在线不卡_japanese日本护士xxx