YIVariableViewSize 1.0.2

YIVariableViewSize 1.0.2

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

未认领维护。



 
依赖项
JRSwizzle~> 1.0
ViewUtils~> 1.1
 


  • 作者
  • Yasuhiro Inami

YIVariableViewSize 1.0.2

首先布局子视图,然后是其容器。不在 AutoLayout 下使用,支持 iOS5 及以上。

(在 #objectivechackathon 中开发 把 Objective C 拿回地图)

ScreenShot1

如何使用

YIVariableViewSize 实际上是一个以 ObjC 协议风格编写的抽象概念。因此,你的任务是使你的 UIView 子类符合 <YIVariableViewSize> 协议,并实现其类似以下的方法

- (CGSize)sizeThatFits:(CGSize)size
{
    [self resizeSubviewsWithFittingSize:size];
    [self positionSubviews];

    size.height = self.mostBottomVisibleSubview.bottom + self.paddingBottomForVariableViewSize;

    return size;
}

- (void)layoutSubviews
{
    [super layoutSubviews];
    [self positionSubviews];  // don't resize, just set origin
}

// change subview's frame.size & drawing contents
- (void)resizeSubviewsWithFittingSize:(CGSize)fittingSize
{
    [self.subview1 sizeToFitWithMaxSize:fittingSize];
    [self.subview2 sizeToFitWithMaxSize:fittingSize];
}

// change subview's frame.origin
- (void)positionSubviews
{
    self.subview2.top = self.subview1.bottom;
}

- (CGFloat)paddingBottomForVariableViewSize
{
    return 10;
}

请注意,-sizeThatFits: 实际上计算子视图的大小、位置,最后是 paddingBottom(Right),而 -layoutSubviews 则仅处理位置。通过这样做,我们可以将调整大小和定位代码分开,并且永远不要在 -layoutSubviews 中尝试调整子视图内容,这是性能关键。

到目前为止一切都很顺利。但如果你在 AppDelegate 中调用 [YIVariableViewSize install],甚至可以省略编写 -sizeThatFits:-layoutSubviews

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [YIVariableViewSize install];
    return YES;
}

依赖项

许可证

YIVariableViewSizeBeerware 许可下可用。

如果我们有一天相遇,你觉得这个玩意儿值得,你可以请我喝一杯。