基于存储的布局参数的内容的动态布局

时间:2013-05-13 15:48:22

标签: ios objective-c

我正在尝试一种创建数据的方法,允许基于数据本身动态布局内容。

举个例子......想象一下你可以在照片上叠加文字的照片应用。但是,不是将文本放在任何地方,而是给出了几种不同布局的选项。

有人可能将文字置于顶部。 另一个可能会在底部对齐文本。 第三个可能在顶部和底部有居中文本。 等...

您如何存储这些不同的选项?

目前我所能想到的就是存储不同“组件”的框架尺寸。即x,y,宽度,高度。或者可能是AutoLayoutConstraint样式维度。即左,右,上,下或其他东西。

然后,在加载组件时,您可以查看针对它们存储的尺寸,并根据需要应用布局。

有没有比这更好的方法?

修改

想到另一种方式。我可以创建几个“区域”,如“顶部中心”,“左上角”,“中间右侧”,“左下角”等......并“使用这些区域属性锚定组件。

1 个答案:

答案 0 :(得分:1)

您可以为文本位置定义新类型

typedef enum {
    TopCenter = 1,
    TopLeft,
    TopRight,
    MiddleCenter,
    MiddleLeft,
    MiddleRight,
    BottomCenter,
    BottomLeft,
    BottomRight,
} TextPosition;

您可以使用a属性设置标签的框架

@property (nonatomic) TextPosition textPosition;

在setter中你可以做这样的事情

-(void)setTextPosition:(TextPosition)textPosition
{
    if (_textPosition != textPosition) {
        _textPosition = textPosition;
        switch (textPosition) {
            case TopCenter :
            {
                self.label.frame = topFrame;
                self.label.textAlignment = UITextAlignmentCenter;
            }
                break;
            case TopLeft :
            {
                self.label.frame = topFrame;
                self.label.textAlignment = UITextAlignmentLeft;
            }
                break;
            ...
    }
}