我对ios很陌生。在编写我的第一个应用程序时,我遇到了自动布局仅适用于 ios 6.0。而且我希望我的应用程序至少适用于 5.0 ios。
也许有人会知道如何在没有自动布局的情况下做到这一点。
我的标签有动态文本,1 行或 2 行或 3 行取决于用户设置。在它下面我有uitextfield。使用自动布局,我不会头疼,因为它可以完成所有工作,文本字段很好地位于上方 1 2 或 3 行文本的下方(调整大小,自动移动)。
那么我应该如何在没有自动布局的情况下做到这一点?
如果没有自动布局,您必须在代码中处理这个问题。这样做的推荐方法是子类化您的容器视图(包含标签和文本字段的视图)并覆盖该layoutSubviews
方法。在那里,您可以根据所需的标准(例如,标签文本 metrics)手动设置视图子视图的框架。
编辑:这是方法中可能存在的特定示例containverView
layoutSubviews
(从我的头顶输入):
// 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;
这只是确保文本字段始终位于标签下方。根据您设置的约束,您可能需要添加更多代码以确保 UI 布局正确。
您还需要确保[containverView setNeedsLayout]
在标签文本更改时调用它。
如果您使用的是 nib 或 storybord,您可以删除文件检查器中的标记