KJGridLayout 0.0.1

KJGridLayout 0.0.1

测试已测试
语言语言 Obj-CObjective C
许可证 自定义
发布最后发布2014年12月

未申明 维护。



  • 作者:
  • Kristopher Johnson

KJGridLayout 和 KJGridLayoutView

KJGridLayout 是一个为 iOS 应用中视图提供简单网格布局管理的类。

它可以用在 UIViewController 的子类中以排列视图,也可以用在 UIView 子类的 -[UIView layoutSubviews] 实现。

KJGridLayoutView 是一个 UIView 子类,它在 -layoutSubviews 实现中使用 KJGridLayout。它允许你在特定的网格位置添加子视图,当视图大小改变或添加新的子视图时,网格布局会自动更新。

内容

项目包含以下目标:

  • KJGridLayout - 包含 KJGridLayoutKJGridLayoutView 类的静态库。您可以将其库复制到自己的项目中,或者只需将 .h.m 文件复制到您的项目中。
  • KJGridLayoutTests - KJGridLayout 库的单元测试。要在 Xcode 中运行测试,选择 KJGridLayout 方案并运行 产品 > 测试 命令。
  • KJGridLayoutDemo - 一个演示 KJGridLayout 类使用的简单应用程序。
  • KJGridLayoutViewDemo - 一个演示 KJGridLayoutView 类使用的简单应用程序。

KJGridLayout 基础使用

要在您的应用中使用 KJGridLayout,将 KJGridLayout.h>复制到您的项目中(或者复制整个 KJGridLayout 库目标)。

通过调用 [[KJGridLayout alloc] init] 创建 KJGridLayout 实例。

然后,通过调用 -addView:rowIndex:columnIndex: 向布局中添加视图。该方法有不同的变体,允许指定跨多个网格单元的 columnSpan 和/或 rowSpan 参数。

在执行布局之前,调用 -setBounds: 设置布局的边界矩形。您可能想要使用视图的边界,或者如果您希望网格只占用视图的一部分,可以设置一个更小的边界矩形。

如果想在列和行之间留一些空隙,就调用 -setColumnSpacing-setRowSpacing

最后,调用 -layoutViews 执行布局操作。这将遍历添加到网格布局中的每个视图并调用 -[UIView setFrame:]。每当父视图大小发生变化时(例如,由于自动旋转),应设置布局的新边界,然后再次调用 -layoutViews

如果要从布局中删除视图,请使用 -removeView:-removeAllViews。如果要将布局更改为元素(例如,将元素从一个列移动到另一个列),则必须先删除它,然后调用 -addView:... 方法的其中一个来将其放在新位置。

KJGridLayout 简单示例

// @property (nonatomic, retain) KJGridLayout *gridLayout;
@synthesize gridLayout;

- (void)viewDidLoad {
    [super viewDidLoad];

    // Initialize the layout manager
    gridLayout = [[KJGridLayout alloc] init] autorelease];
    [gridLayout setColumnSpacing:4];
    [gridLayout setRowSpacing:4];

    // Create 1-9 keypad buttons in 3x3 grid
    for (NSUInteger i = 0; i < 9; ++i) {
        NSString *title = [NSString stringWithFormat:@"%u", (unsigned) i + 1];

        UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [button setTitle:title forState:UIControlStateNormal];
        [self.view addSubview:button];

        NSUInteger rowIndex = i / 3;
        NSUInteger columnIndex = i % 3;
        [gridLayout addView:button row:rowIndex column:columnIndex];
    }

    // Set the layout bounds to match the view's bounds.
    [gridLayout setBounds:[self.view bounds]];

    // Call -layoutViews
    [gridLayout layoutViews];
}

- (void)viewDidUnload {
    // Release the grid layout to release the retained views
    self.gridLayout = nil;
    [super viewDidUnload];
}

- (void)dealloc {
    [gridLayout release];
    [super dealloc];
}

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation
                                         duration:(NSTimeInterval)duration {
    [super willAnimateRotationToInterfaceOrientation:orientation duration:duration];

    // Redo layout during autorotation
    [UIView animateWithDuration:duration animations:^{
        [gridLayout setBounds:[self.view bounds]];
        [gridLayout layoutViews];        
    }];    
}

请参阅包含的 KJGridLayoutDemo 应用程序以获取更完整的示例。

KJGridLayoutView 的使用方法

要在您的应用程序中使用 KJGridLayoutView,将 KJGridLayout.hKJGridLayout.mKJGridLayoutView.hKJGridLayoutView.m 复制到您的项目中(或复制整个 KJGridLayout 库目标)。

使用 KJGridLayoutView 与使用 KJGridLayout 类似,但您不是调用 -addView:row:rowSpan:column:columnSpan:options:,而是调用 -addSubview:row:rowSpan:column:columnSpan:options:,这两个方法都会将视图添加为子视图并设置其网格布局参数。

您也可以用 -[UIView addSubview:]KJGridLayoutView 一起使用。使用该方法添加的子视图不会参与网格布局。

如果您正确设置了网格布局视图的 autoresizingMask,则在自动旋转或其他导致视图大小变化的任何事件发生时,其网格布局代码将自动调用。

请参阅 KJGridLayoutViewDemo 以获取完整示例。

授权协议

版权所有 © 2012 Kristopher Johnson

特此授予任何收到此软件和关联文档副本(以下简称“软件”)的人士在不受限制的情况下处理软件的权利,包括但不仅限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许将软件提供给他人,前提是满足以下条件

上述版权声明和本许可协议应包含在软件的所有副本或实质性部分中。

本软件按“现状”提供,不提供任何类型的保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定目的和无侵权性。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任,以及因软件或使用或以其他方式处理软件而引起的任何行动、侵权、损害或其他责任承担责任。