【问题标题】:Dynamic layout of content based on stored layout parameters基于存储的布局参数的内容动态布局
【发布时间】:2013-05-13 15:48:22
【问题描述】:

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

举个例子......想象一个照片应用程序,您可以在其中将文本叠加到照片上。但不是将文本放在任何地方,而是为您提供了不同布局的多个选项。

文本可能位于顶部居中。 另一个可能使文本在底部左对齐。 第三个可能在顶部和底部居中文本。 等等……

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

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

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

还有比这更好的方法吗?

编辑

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

【问题讨论】:

  • 如何将所有可能的帧存储在 .plist 中?易于更新,布局和代码将被拆分。 CGRectMake 将有助于从 4 个整数为 UIView 组件制作一个矩形。

标签: ios objective-c


【解决方案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;
            ...
    }
}

【讨论】:

  • 谢谢,我想我要把这个想法与自动布局约束结合起来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 2011-06-26
相关资源
最近更新 更多