Useful for showing text or custom view tags in a vertical or horizontal scrollable view and support Autolayout at the same time

Related tags

Tag ios ui objective-c tags
Overview

TTGTagCollectionView

CI Status Version License Platform Apps Using Total Download

Screenshot

Alignment Type

What

TTGTagCollectionView is useful for showing different size tag views in a vertical or horizontal scrollable view. And if you only want to show text tags, you can use TTGTextTagCollectionView instead, which has more simple api. At the same time, It is highly customizable that many features of the text tag can be configured, like the tag font size and the background color.

Features

  • Both rich style text tag and custom view tag supported.
  • Highly customizable, each text tag can be configured.
  • Vertical and horizontal scrollable.
  • Support NSAttributedString rich text tag.
  • Support different kinds of alignment types.
  • Support specifying number of lines.
  • Support Autolayout intrinsicContentSize to auto determine height based on content size.
  • Support pull to refresh, like SVPullToRefresh.
  • Use preferredMaxLayoutWidth to set available width like UIlabel.
  • Support CocoaPods and Swift Package Manager

Demo

You can find demos in the Example->TTGTagCollectionView.xcworkspace or ExampleSwift->TTGTagSwiftExample.xcworkspace project. Run pod update before try it.

Example project

Code Structure

Example project

Requirements

iOS 9 and later.

Installation

CocoaPods for Objective-C

pod "TTGTagCollectionView"

CocoaPods for Swift

use_frameworks!
pod "TTGTagCollectionView"

Swift Package Manager

Add by [email protected]:zekunyan/TTGTagCollectionView.git

Usage

TTGTextTagCollectionView

Use TTGTextTagCollectionView to show text tags.

Basic usage

// Create TTGTextTagCollectionView view
TTGTextTagCollectionView *tagCollectionView = [[TTGTextTagCollectionView alloc] initWithFrame:CGRectMake(20, 20, 200, 200)];
[self.view addSubview:tagCollectionView];
// Create TTGTextTag object
TTGTextTag *textTag = [TTGTextTag tagWithContent:[TTGTextTagStringContent contentWithText:@"Some text"] style:[TTGTextTagStyle new]];
// Add tag
[tagCollectionView addTag:textTag];

Delegate

Conform the TTGTextTagCollectionViewDelegate protocol to get callback when you select the tag or content height changes.

@protocol TTGTextTagCollectionViewDelegate <NSObject>
@optional
- (BOOL)textTagCollectionView:(TTGTextTagCollectionView *)textTagCollectionView
                    canTapTag:(TTGTextTag *)tag
                      atIndex:(NSUInteger)index;

- (void)textTagCollectionView:(TTGTextTagCollectionView *)textTagCollectionView
                    didTapTag:(TTGTextTag *)tag
                      atIndex:(NSUInteger)index;

- (void)textTagCollectionView:(TTGTextTagCollectionView *)textTagCollectionView
            updateContentSize:(CGSize)contentSize;
@end

Customization

Each tag can be configured.

@interface TTGTextTag : NSObject <NSCopying>

/// ID
@property (nonatomic, assign, readonly) NSUInteger tagId; // Auto increase. The only identifier and main key for a tag

/// Attachment object. You can use this to bind any object you want to each tag.
@property (nonatomic, strong) id _Nullable attachment;

/// Normal state content and style
@property (nonatomic, copy) TTGTextTagContent * _Nonnull content;
@property (nonatomic, copy) TTGTextTagStyle * _Nonnull style;

/// Selected state content and style
@property (nonatomic, copy) TTGTextTagContent * _Nullable selectedContent;
@property (nonatomic, copy) TTGTextTagStyle * _Nullable selectedStyle;

/// Selection state
@property (nonatomic, assign) BOOL selected;

///...Other things...

@end

TTGTextTagContent has two sub classes.

// Normal Text
@interface TTGTextTagStringContent : TTGTextTagContent
/// Text
@property (nonatomic, copy) NSString * _Nonnull text;
/// Text font
@property (nonatomic, copy) UIFont * _Nonnull textFont;
/// Text color
@property (nonatomic, copy) UIColor * _Nonnull textColor;
@end

// NSAttributedString Text
@interface TTGTextTagAttributedStringContent : TTGTextTagContent
/// Attributed text
@property (nonatomic, copy) NSAttributedString * _Nonnull attributedText;
@end

Config TTGTextTagStyle if you want to change tag styles.

@interface TTGTextTagStyle : NSObject <NSCopying>

/// Background color
@property (nonatomic, copy) UIColor * _Nonnull backgroundColor; // Default is [UIColor lightGrayColor]

/// Text alignment
@property (nonatomic, assign) NSTextAlignment textAlignment; // Default is NSTextAlignmentCenter

/// Gradient background color
@property (nonatomic, assign) BOOL enableGradientBackground; // Default is NO
@property (nonatomic, copy) UIColor * _Nonnull gradientBackgroundStartColor;
@property (nonatomic, copy) UIColor * _Nonnull gradientBackgroundEndColor;
@property (nonatomic, assign) CGPoint gradientBackgroundStartPoint;
@property (nonatomic, assign) CGPoint gradientBackgroundEndPoint;

/// Corner radius
@property (nonatomic, assign) CGFloat cornerRadius; // Default is 4
@property (nonatomic, assign) Boolean cornerTopRight;
@property (nonatomic, assign) Boolean cornerTopLeft;
@property (nonatomic, assign) Boolean cornerBottomRight;
@property (nonatomic, assign) Boolean cornerBottomLeft;

/// Border
@property (nonatomic, assign) CGFloat borderWidth; // Default is [UIColor whiteColor]
@property (nonatomic, copy) UIColor * _Nonnull borderColor; // Default is 1

/// Shadow.
@property (nonatomic, copy) UIColor * _Nonnull shadowColor;    // Default is [UIColor blackColor]
@property (nonatomic, assign) CGSize shadowOffset;   // Default is (2, 2)
@property (nonatomic, assign) CGFloat shadowRadius;  // Default is 2f
@property (nonatomic, assign) CGFloat shadowOpacity; // Default is 0.3f

/// Extra space in width and height, will expand each tag's size
@property (nonatomic, assign) CGSize extraSpace;

/// Max width for a text tag. 0 and below means no max width.
@property (nonatomic, assign) CGFloat maxWidth;
/// Min width for a text tag. 0 and below means no min width.
@property (nonatomic, assign) CGFloat minWidth;

/// Max height for a text tag. 0 and below means no max height.
@property (nonatomic, assign) CGFloat maxHeight;
/// Min height for a text tag. 0 and below means no min height.
@property (nonatomic, assign) CGFloat minHeight;

/// Exact width. 0 and below means no work
@property (nonatomic, assign) CGFloat exactWidth;
/// Exact height. 0 and below means no work
@property (nonatomic, assign) CGFloat exactHeight;

@end

You can also configure scroll direction, alignment, lines limit, spacing and inset.

// TTGTextTagCollectionView.h
// Define if the tag can be selected.
@property (assign, nonatomic) BOOL enableTagSelection;

// Tags scroll direction, default is vertical.
@property (nonatomic, assign) TTGTagCollectionScrollDirection scrollDirection;

// Tags layout alignment, default is left.
@property (nonatomic, assign) TTGTagCollectionAlignment alignment;

// Number of lines. 0 means no limit, default is 0 for vertical and 1 for horizontal.
@property (nonatomic, assign) NSUInteger numberOfLines;

// Tag selection limit, default is 0, means no limit
@property (nonatomic, assign) NSUInteger selectionLimit;

// Horizontal and vertical space between tags, default is 4.
@property (assign, nonatomic) CGFloat horizontalSpacing;
@property (assign, nonatomic) CGFloat verticalSpacing;

// Content inset, default is UIEdgeInsetsMake(2, 2, 2, 2).
@property (nonatomic, assign) UIEdgeInsets contentInset;

// The true tags content size, readonly
@property (nonatomic, assign, readonly) CGSize contentSize;

// Manual content height
// Default = NO, set will update content
@property (nonatomic, assign) BOOL manualCalculateHeight;
// Default = 0, set will update content
@property (nonatomic, assign) CGFloat preferredMaxLayoutWidth;

// Scroll indicator
@property (nonatomic, assign) BOOL showsHorizontalScrollIndicator;
@property (nonatomic, assign) BOOL showsVerticalScrollIndicator;

Alignment types:

typedef NS_ENUM(NSInteger, TTGTagCollectionAlignment) {
    TTGTagCollectionAlignmentLeft = 0,                           // Default
    TTGTagCollectionAlignmentCenter,                             // Center
    TTGTagCollectionAlignmentRight,                              // Right
    TTGTagCollectionAlignmentFillByExpandingSpace,               // Expand horizontal spacing and fill
    TTGTagCollectionAlignmentFillByExpandingWidth,               // Expand width and fill
    TTGTagCollectionAlignmentFillByExpandingWidthExceptLastLine, // Expand width and fill, except last line
};

Modify tags

Add tag.

// TTGTextTagCollectionView.h
/// Add
- (void)addTag:(TTGTextTag *)tag;
- (void)addTags:(NSArray 
    *)tags;
  

Insert tag.

// TTGTextTagCollectionView.h
/// Insert
- (void)insertTag:(TTGTextTag *)tag atIndex:(NSUInteger)index;
- (void)insertTags:(NSArray 
    *)tags atIndex:(
   NSUInteger)index;
  

Update tag.

// TTGTextTagCollectionView.h
/// Update
- (void)updateTagAtIndex:(NSUInteger)index selected:(BOOL)selected;
- (void)updateTagAtIndex:(NSUInteger)index withNewTag:(TTGTextTag *)tag;

Remove tag.

// TTGTextTagCollectionView.h
// Remove tag
- (void)removeTag:(TTGTextTag *)tag;
- (void)removeTagById:(NSUInteger)tagId;
- (void)removeTagAtIndex:(NSUInteger)index;
- (void)removeAllTags;

Get tags.

// TTGTextTagCollectionView.h
/// Get tag
- (TTGTextTag *)getTagAtIndex:(NSUInteger)index;
- (NSArray 
    *)getTagsInRange:(
   NSRange)range;


   /// Get all
- (
   NSArray 
   
     *)allTags;
- (
    NSArray 
    
      *)allSelectedTags;
- (
     NSArray 
     
       *)allNotSelectedTags;
     
    
   
  

Reload

You can reload tags programmatically.

// TTGTextTagCollectionView.h
- (void)reload;

Index at point

Returns the index of the tag located at the specified point.

// TTGTextTagCollectionView.h
- (NSInteger)indexOfTagAt:(CGPoint)point;

TTGTagCollectionView

Use TTGTagCollectionView to show custom tag views.

DataSource and Delegate

Just like the UITableView, you must conform and implement the required methods of TTGTagCollectionViewDelegate and TTGTagCollectionViewDataSource to get TTGTagCollectionView work.

DataSource

@protocol TTGTagCollectionViewDataSource <NSObject>
@required
- (NSUInteger)numberOfTagsInTagCollectionView:(TTGTagCollectionView *)tagCollectionView;

- (UIView *)tagCollectionView:(TTGTagCollectionView *)tagCollectionView tagViewForIndex:(NSUInteger)index;
@end

Delegate

@protocol TTGTagCollectionViewDelegate <NSObject>
@required
- (CGSize)tagCollectionView:(TTGTagCollectionView *)tagCollectionView sizeForTagAtIndex:(NSUInteger)index;

@optional
- (BOOL)tagCollectionView:(TTGTagCollectionView *)tagCollectionView shouldSelectTag:(UIView *)tagView atIndex:(NSUInteger)index;

- (void)tagCollectionView:(TTGTagCollectionView *)tagCollectionView didSelectTag:(UIView *)tagView atIndex:(NSUInteger)index;

- (void)tagCollectionView:(TTGTagCollectionView *)tagCollectionView updateContentSize:(CGSize)contentSize;
@end

Customization

// TTGTagCollectionView.h
// Tags scroll direction, default is vertical.
@property (nonatomic, assign) TTGTagCollectionScrollDirection scrollDirection;

// Tags layout alignment, default is left.
@property (nonatomic, assign) TTGTagCollectionAlignment alignment;

// Number of lines. 0 means no limit, default is 0 for vertical and 1 for horizontal.
@property (nonatomic, assign) NSUInteger numberOfLines;

// Horizontal and vertical space between tags, default is 4.
@property (nonatomic, assign) CGFloat horizontalSpacing;
@property (nonatomic, assign) CGFloat verticalSpacing;

// Content inset, default is UIEdgeInsetsMake(2, 2, 2, 2).
@property (nonatomic, assign) UIEdgeInsets contentInset;

// The true tags content size, readonly
@property (nonatomic, assign, readonly) CGSize contentSize;

// Manual content height
// Default = NO, set will update content
@property (nonatomic, assign) BOOL manualCalculateHeight;
// Default = 0, set will update content
@property (nonatomic, assign) CGFloat preferredMaxLayoutWidth;

// Scroll indicator
@property (nonatomic, assign) BOOL showsHorizontalScrollIndicator;
@property (nonatomic, assign) BOOL showsVerticalScrollIndicator;

Reload

You can reload tags programmatically.

// TTGTagCollectionView.h
- (void)reload;

Index at point

Returns the index of the tag located at the specified point.

// TTGTagCollectionView.h
- (NSInteger)indexOfTagAt:(CGPoint)point;

Fix

UITableViewAutomaticDimension may not work when using tagView in tableViewCell. You should reload your tableView in the viewDidAppear.

Author

zekunyan, [email protected]

License

TTGTagCollectionView is available under the MIT license. See the LICENSE file for more info.

Comments
  • TTGTagCollectionView height and scroll

    TTGTagCollectionView height and scroll

    Hello, Thanks for very decent library.

    I noticed that TTGTagCollectionView limits height of view and enables scrolling if there are many tags inside. I'm using TTGTagCollectionView inside UITableViewCell, so I don't need TTGTagCollectionView to additionally enable scrolling. How do I prevent this?

    Best Regards K.

    opened by karek314 10
  • problem in tableview cell

    problem in tableview cell

    Getting more of extra space in tableview cells tagview.

    Given constraints are top to "add tags label", leading, trailing, bottom, and height greater than or equal to 30

    tagView.extraSpace = CGSize(width:20,height:25)

    in layoutSubviews,

    tagView.tagCornerRadius = 20 tagView.clipsToBounds = true

    screen shot 2017-01-15 at 1 43 20 pm
    opened by rakii 10
  • Compile Error: Duplicate interface definition for class 'TTGTextTagCollectionView'

    Compile Error: Duplicate interface definition for class 'TTGTextTagCollectionView'

    Compile with XCode 12.5, get error message:

    /Pods/TTGTagCollectionView/Sources/TextTag/TTGTextTagCollectionView.h:46:1: Duplicate interface definition for class 'TTGTextTagCollectionView'

    The duplicate interface definition is happened in "TTGTextTagCollectionView.h:46", so have no idea how to modify this.

    opened by darkengine 7
  • On horizontal scroll direction collectionView gets uncontrolable width

    On horizontal scroll direction collectionView gets uncontrolable width

    The tag collectionView gets a confusing width after scroll direction is set on horizontal.

    tagSelectorCollection.scrollDirection = TTGTagCollectionScrollDirection.horizontal

    See image what happens: Bug

    if I'am removeing the scrollDirection property than everything works fine. Can anyone help me? OK

    opened by Karahan00 6
  • Enhancement suggestion for setTagAtIndex

    Enhancement suggestion for setTagAtIndex

    I love this control. Thank you for making it available.

    I've got it doing a lot of what I want it to so far, but there is one enhancement would like to suggest that should make it even more awesome....

    [_tagView setTagAtIndex:0 backgroundColor:[UIColor]]; [_tagView setTagAtIndex:0 font:[UIColor]]; [_tagView setTagAtIndex:0 borderColor:[UIColor]]; [_tagView setTagAtIndex:0 borderSizer:[UIColor]];

    etc....

    In my case, want to add a selectable tag at index 0 that says "Add Tag" in GREEN background to set it apart from other tags.

    opened by rjpalermo1 6
  • Horizontal two lines is not performing as expected

    Horizontal two lines is not performing as expected

    even though I have added numberOfLines and countPerSection parameters, it is not displaying multiple lines for horizontal mode.

    tagView.scrollDirection = .horizontal tagView.numberOfLines = 2 tagView.selectionLimit = 10

    I need two lines .. each having maximum 10 tags

    Screenshot 2022-09-13 at 11 28 35 AM
    opened by krutikazoodmall 5
  • UITableView嵌套TTGTagCollectionView高度怎么计算

    UITableView嵌套TTGTagCollectionView高度怎么计算

    看完了demo以及closed的issue,想请问一下,我是纯代码编写; tableViewCell中放tags,TTGTextTagCollectionView是用懒加载的

    • (TTGTextTagCollectionView *)tagsView { if (!_tagsView) { _tagsView = [[TTGTextTagCollectionView alloc]init]; // Use manual calculate height _tagsView.manualCalculateHeight = YES; _tagsView.preferredMaxLayoutWidth = kScreenWidth - 40;

        // Alignment
        _tagsView.alignment = TTGTagCollectionAlignmentFillByExpandingWidth;
      
      
        TTGTextTagConfig *config = _tagsView.defaultConfig;
        config.textFont = kSysFont(14);
        config.textColor = Color_Text_Gray;
        config.selectedTextColor = [UIColor colorWithRed:0.18 green:0.19 blue:0.22 alpha:1.00];
        config.backgroundColor = [UIColor colorWithRed:0.98 green:0.91 blue:0.43 alpha:1.00];
        config.selectedBackgroundColor = [UIColor colorWithRed:0.97 green:0.64 blue:0.27 alpha:1.00];
      
        _tagsView.horizontalSpacing = 6.0;
        _tagsView.verticalSpacing = 8.0;
      
        config.borderColor = [UIColor colorWithRed:0.18 green:0.19 blue:0.22 alpha:1.00];
        config.selectedBorderColor = [UIColor colorWithRed:0.18 green:0.19 blue:0.22 alpha:1.00];
        config.borderWidth = 1;
        config.selectedBorderWidth = 1;
      
        config.shadowColor = [UIColor blackColor];
        config.shadowOffset = CGSizeMake(0, 0.3);
        config.shadowOpacity = 0.3f;
        config.shadowRadius = 0.5f;
      
        config.cornerRadius = 7;
      
        config.enableGradientBackground = YES;
        config.gradientBackgroundStartColor = [UIColor orangeColor];
        config.selectedGradientBackgroundStartColor = [UIColor yellowColor];
        config.gradientBackgroundEndColor = [UIColor yellowColor];
        config.selectedGradientBackgroundEndColor = [UIColor grayColor];
        config.gradientBackgroundStartPoint =CGPointMake(0, 0);
        config.gradientBackgroundEndPoint = CGPointMake(1, 1);
      

      } return _tagsView; }

    cell的init方法如下布局

    [self.tagsView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.faultDescLabel.mas_bottom).offset(10); make.left.equalTo(self.bgView).offset(10); make.right.equalTo(self.bgView).offset(-10); make.height.equalTo(@(kScreenHeight)); }];

    cell的模型中如下设置的

    • (void)setModel:(IssueList *)model {

      [self.tagsView removeAllTags]; [self.tagsView addTags:model.faultTypes];

      self.tagsView.alignment = TTGTagCollectionAlignmentFillByExpandingWidth; //self.tagsView.preferredMaxLayoutWidth = kScreenWidth - 40; [self.tagsView reload]; [self updateConstr]; }

    cell更新布局如下:

    • (void)updateConstr { [self.tagsView mas_updateConstraints:^(MASConstraintMaker *make) { make.height.equalTo(@(self.tagsView.contentSize.height)); }]; }

    现在对于UITableView中的heightForRow应该如何拿到动态高度呢,我看demo中用的estimatedRowHeight,没有实现heightForRow的代理方法,也可以显示,不知道怎么弄的?

    盼回复!

    opened by deepindo 5
  • TTGTagCollectionAlignmentFillByExpandingWidthExceptLastLine排版下只有一行的时候有问题

    TTGTagCollectionAlignmentFillByExpandingWidthExceptLastLine排版下只有一行的时候有问题

    需求:当只有一行并且第一行填充不满的时候,希望能靠左展示。 因为不确定是不是多行,所以采用TTGTagCollectionAlignmentFillByExpandingWidthExceptLastLine排版,但是只有一行的时候会自动把每个item按照TTGTagCollectionAlignmentFillByExpandingWidth进行排版,我去查看了源码,发现TTGTagCollectionAlignmentFillByExpandingWidthExceptLastLine确实只考虑多行的情况,希望能修复,谢谢!

    opened by zh20102618 5
  • Carthage error with 1.11.0

    Carthage error with 1.11.0

    I've tried to update from 1.9.0 to 1.11.0, but Carthage fails:

    *** Skipped building TTGTagCollectionView due to the error:
    Dependency "TTGTagCollectionView" has no shared framework schemes for any of the platforms: iOS
    
    opened by jdanthinne 5
  • Allow configuration of which corners to round

    Allow configuration of which corners to round

    Sometimes a user may only want the bottom right and bottom left corners rounded. For example

    screen shot 2018-06-13 at 1 37 37 pm

    In Swift that may look something like

    config.roundedCorners = [UIRectCorner.bottomLeft, UIRectCorner.bottomRight]
    
    opened by twof 5
  • 纯代码使用时这样计算高度

    纯代码使用时这样计算高度

        tagCollectionView.manualCalculateHeight = YES;
        tagCollectionView.preferredMaxLayoutWidth = kScreenWidth - 20;
        [tagCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.top.left.mas_equalTo(10);         
            make.right.mas_equalTo(-10);
            make.height.mas_equalTo(kScreenHeight); //此处高度必须大于实际高度
        }];
        
        //必须调用
        [tagCollectionView reload];
    
        //更新高度
        [tagCollectionView mas_updateConstraints:^(MASConstraintMaker *make) {
            make.height.equalTo(@(tagCollectionView.contentSize.height));
        }];
        
        // tagCollectionView 的实际高度
        NSLog(@"-->> height:%f", tagCollectionView.contentSize.height);
    
    
    opened by hw20101101 4
  • Align vertically

    Align vertically

    I noticed that it is possible to center tags horizontally in the view with the TTGTagCollectionAlignmentX possibilities.

    Is it possible to center tags vertically in the view ?

    In the image below, you can see a red box (TTGTextTagCollectionView) and the tag inside.
    The red box take the full height of the superview, so it can change.

    I can have multiple tags that will be presented vertically, but can have only one tag too.

    Is it possible to center the tags vertically in the TTGTextTagCollectionView ?

    I didn't found something to do it.

    IMG_199AB776366D-1

    opened by ad-boschung 3
  • Scroll to specified tag position

    Scroll to specified tag position

    hi , is there any way to scroll the scrollview to desired tag when tag is preselected ? in my case the tag is being selected but scrolling to that position so i have to scroll it myself.

    opened by iZeDeveloper 3
  • selectedContent text color is reset to black

    selectedContent text color is reset to black

    I set different background colors and text colors for normal content/style and selected content/style. Background colors always display correct, but the text color is reset when scrolling a tableView with a TTGTextTagCollectionView for each cell. So when the cell re-renders in cellForRowAt, the text color is almost always black. I set it to be white on selected tags.

    opened by 70m3n 3
Owner
zekunyan
iOS Programmer
zekunyan
This pod provides a view controller for choosing and creating tags in the style of wordpress or tumblr.

PARTagPicker This pod provides a view controller for choosing and creating tags in the style of wordpress or tumblr. This tag picker was originally us

Paul Rolfe 370 Nov 17, 2022
TagsGridView: A simple view for your tags

TagsGridView: A simple view for your tags. Requirements Installation Contents License Support Credits Requirements iOS 14, macOS 10.15 Swift 5.5 Xcode

Alex 5 Nov 4, 2021
Highly customizable iOS tags view [input, edit, dynamic, tag, token, field, NSTokenField]

RKTagsView Highly customizable iOS tags view (like NSTokenField). Supports horizontal and vertical direction, editing, multiple selection, Auto Layout

Roman Kulesha 450 Oct 2, 2022
UIScrollView subclass that allows to add a list of highly customizable tags.

UIScrollView subclass that allows to add a list of highly customizable tags. You can customize colors, border radius, and the tail of the tag. Tags ca

Andrea Mazzini 765 Nov 19, 2022
🔍 Awesome fully customize search view like Pinterest written in Swift 5.0 + Realm support!

YNSearch + Realm Support Updates See CHANGELOG for details Intoduction ?? Awesome search view, written in Swift 5.0, appears search view like Pinteres

Kyle Yi 1.2k Dec 17, 2022
Simple and highly customizable iOS tag list view, in Swift.

TagListView Simple and highly customizable iOS tag list view, in Swift. Supports Storyboard, Auto Layout, and @IBDesignable. Usage The most convenient

Ela Workshop 2.5k Dec 28, 2022
Simple and highly customizable iOS tag list view, in Swift.

TagListView Simple and highly customizable iOS tag list view, in Swift. Supports Storyboard, Auto Layout, and @IBDesignable. Usage The most convenient

Ela Workshop 2.5k Dec 31, 2022
🔥 🔥 🔥Support for ORM operation,Customize the PQL syntax for quick queries,Support dynamic query,Secure thread protection mechanism,Support native operation,Support for XML configuration operations,Support compression, backup, porting MySQL, SQL Server operation,Support transaction operations.

?? ?? ??Support for ORM operation,Customize the PQL syntax for quick queries,Support dynamic query,Secure thread protection mechanism,Support native operation,Support for XML configuration operations,Support compression, backup, porting MySQL, SQL Server operation,Support transaction operations.

null 60 Dec 12, 2022
BMPlayer - A video player for iOS, based on AVPlayer, support the horizontal, vertical screen

A video player for iOS, based on AVPlayer, support the horizontal, vertical screen. support adjust volume, brightness and seek by slide, support subtitles.

Eliyar Eziz 1.8k Jan 4, 2023
Powerful autolayout framework, that can manage UIView(NSView), CALayer and not rendered views. Not Apple Autolayout wrapper. Provides placeholders. Linux support.

CGLayout Powerful autolayout framework, that can manage UIView(NSView), CALayer and not rendered views. Has cross-hierarchy coordinate space. Implemen

Koryttsev Denis 45 Jun 28, 2022
Horizontal and Vertical collection view for infinite scrolling that was designed to be used in SwiftUI

InfiniteScroller Example struct ContentView: View { @State var selected: Int = 1 var body: some View { InfiniteScroller(direction: .ve

Serhii Reznichenko 5 Apr 17, 2022
A simple yet customizable horizontal and vertical picker view

WheelPicker A simple yet customizable horizontal and vertical picker view Features Vertical or Horizontal picker Image or Text data Configure UILabel

Mind Studios 74 Sep 26, 2022
TomatoVerticalMenuMania lets you create a vertical, scrollable menu to the left of the screen.

TomatoVerticalMenuMania Framework Development and compatibility Development platform: iOS Language: Swift Compatibility: iOS 13 or greater Description

Tomato Software 0 Jan 11, 2022
UISlider clone with multiple thumbs and values, range highlight, optional snap intervals, optional value labels, either vertical or horizontal.

MultiSlider UISlider clone with multiple thumbs and values, range highlight, optional snap intervals, optional value labels, either vertical or horizo

Yonat Sharon 326 Dec 29, 2022
Easily add vertical and horizontal pull to refresh to any UIScrollView. Can also add multiple pull-to-refesh views at once.

This is a fork from the famous SVPullToRefresh pod with 2 additional functionalities: Can add multiple pull-to-refresh views into one single UIScrollV

Hoang Tran 42 Dec 28, 2022
UISlider clone with multiple thumbs and values, range highlight, optional snap intervals, optional value labels, either vertical or horizontal.

MultiSlider UISlider clone with multiple thumbs and values, range highlight, optional snap intervals, optional value labels, either vertical or horizo

Yonat Sharon 326 Dec 29, 2022
Swipe between pages with an interactive title navigation control. Configure horizontal or vertical chains for unlimited pages amount.

SlideController is a simple and flexible UI component fully written in Swift. Built using power of generic types, it is a nice alternative to UIPageVi

Touchlane 409 Dec 6, 2022
A structured vertical/horizontal stack layout

EEStackLayout A vertical stackview which takes subviews with different widths and adds them to it's rows with paddings, spacings etc. Installation Coc

null 48 Nov 6, 2021
Swipe between pages with an interactive title navigation control. Configure horizontal or vertical chains for unlimited pages amount.

SlideController is a simple and flexible UI component fully written in Swift. Built using power of generic types, it is a nice alternative to UIPageVi

Touchlane 411 Jan 5, 2023
zekunyan 608 Dec 30, 2022