ios自动布局类似

ios自动布局类似,ios,xcode,Ios,Xcode,我对ios很陌生。在编写我的第一个应用程序时,我发现autolayout仅适用于ios 6.0。我希望我的应用程序至少支持5.0iOS 也许任何人都知道如何在没有自动布局的情况下实现这一点 我的标签有动态文本,1行或2行或3行取决于用户设置。下面是uitextfield。有了autolayout,我就不头疼了,因为它完成了所有的工作,textfield很好地位于下面的1、2或3行文本中(调整大小,自动移动) 那么,如果没有autolayout,我应该怎么做呢?如果没有autolayout,您必须

我对ios很陌生。在编写我的第一个应用程序时,我发现autolayout仅适用于ios 6.0。我希望我的应用程序至少支持5.0iOS

也许任何人都知道如何在没有自动布局的情况下实现这一点

我的标签有动态文本,1行或2行或3行取决于用户设置。下面是uitextfield。有了autolayout,我就不头疼了,因为它完成了所有的工作,textfield很好地位于下面的1、2或3行文本中(调整大小,自动移动)


那么,如果没有autolayout,我应该怎么做呢?

如果没有autolayout,您必须在代码中处理它。建议这样做的方法是对容器视图(包含标签和文本字段的视图)进行子类化,并覆盖
layoutSubviews
方法。在其中,您可以根据所需的条件(例如,参数)手动设置视图子视图的框架

EDIT:下面是一个具体的示例,它可能位于
containverView
layoutSubviews
方法中(从头顶键入):

这只是确保文本字段始终位于标签下方。根据已有的约束条件,可能需要添加更多代码以确保UI布局正确


您还需要确保标签文本更改时调用
[ContainerView setNeedsLayout]

如果您使用的是nib或storybord,您只需删除文件检查器中的标记即可

您能说得更具体些或举一些例子吗?非常感谢您的帮助。文本在视图中不会动态更改,只有在再次加载视图后才会更改。我试图更清楚地理解你想说的话,但还有几个问题。。如果我理解正确,我需要用我的标签制作另一个.xib?或者我需要创建另一个类并将iboutlets放到那里,然后更改它们的初始化?我不能在没有子视图的情况下执行此操作吗?我知道label和textfield在哪里,只有在初始化时,我才需要通过label上的行来构建它们。如果希望避免创建UIView子类,并且知道加载控制器后布局不会更改,则可以将该代码添加到视图控制器初始化中。尝试这样做,但self不会在我的控制器中有边界。让它运行self.view.bounds。但更奇怪的是,我的标签上只显示了一个单词。或者更具体地说,只有4个字符,超过4个字符,我就没有文本了。完成了。问题是我在这些函数之后初始化了文本。非常感谢你的帮助!
// Those could be IBOutlets, or obtained by inspecting self.subviews
UILabel *label = self.label;
UITextField *textField = self.textField;

// Determine the labelSize, we could limit the maxSize (especially the height) manually here
CGSize maxSize = self.bounds.size;
CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:maxSize lineBreakMode:label.lineBreakMode];

// Set the computed label size
CGRect labelFrame = label.frame;
labelFrame.size = labelSize;
label.frame = labelFrame;

// Now move the textField just below the label (we could also add a vertical margin here if we want)
CGRect textFieldFrame = textField.frame;
textFieldFrame.origin.y = labelFrame.origin.y + labelFrame.size.height;
textField.frame = textFieldFrame;