2013-05-13 86 views
0

我在想一种创建允许基于数据本身的内容动态布局的数据的方法。基于已存储布局参数的内容动态布局

作为一个例子...想象一个照片应用程序,您可以在其上叠加文字到照片上。但不是把文本放在任何地方,你可以选择不同的布局。

有人可能会将文本居中置顶。 另一个可能会在底部将文字左对齐。 三分之一可能在顶部和底部居中文本。 etc ...

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

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

然后加载组件时,你可以看看存储对他们的尺寸和应用所需的布局。

有没有比这更好的方法?

编辑

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

+1

如何在.plist中存储所有可能的框架?易于更新,布局和代码将被拆分。 CGRectMake将有助于为4个整数的UIView组件创建一个矩形。 – 2013-05-13 16:04:25

回答

1

你可以定义一个新的类型的文本位置

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

你可以使用一个属性来设置标签的框架

@property (nonatomic) TextPosition textPosition; 

在二传手,你可以做这样的事情

-(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; 
      ... 
    } 
} 
+1

谢谢,我想我将把这个想法与Auto Layout约束结合起来。 – Fogmeister 2013-05-13 17:03:38