Ios 二级视图是否可以在情节提要中自动调整大小,如;视为;变化?
我有一个带有二级视图的视图控制器,当作为iPhone7观看时,它在情节提要中是这样的 但如果我切换到iPhone SE,它看起来是这样的:Ios 二级视图是否可以在情节提要中自动调整大小,如;视为;变化?,ios,xcode,storyboard,Ios,Xcode,Storyboard,我有一个带有二级视图的视图控制器,当作为iPhone7观看时,它在情节提要中是这样的 但如果我切换到iPhone SE,它看起来是这样的: 有没有可能让它在情节提要中自动调整大小,就像视图控制器那样?嗯。。。首先,你想完成什么?我从未以这种方式向视图控制器添加视图。根据该UIView的标题,您似乎正在尝试使用自定义视图来处理错误。下面是代码中“具有可视格式的约束”/NSLayoutConstraint”的快速预览 创建一个名为MyCustomView(或其他)的类,并将其从UIView继承。
有没有可能让它在情节提要中自动调整大小,就像视图控制器那样?嗯。。。首先,你想完成什么?我从未以这种方式向视图控制器添加视图。根据该UIView的标题,您似乎正在尝试使用自定义视图来处理错误。下面是代码中“具有可视格式的约束”/
NSLayoutConstraint
”的快速预览
创建一个名为MyCustomView
(或其他)的类,并将其从UIView继承。然后在UIViewController中,您可以在需要使用视觉格式约束时添加它
1) 在需要显示时初始化并配置MyCustomView
(此代码位于视图控制器中的某个位置):
2) 这就是自定义类中的constrainToSuperView
的外观:
private func constrainToSuperView() {
self.translatesAutoresizingMaskIntoConstraints = false
var constraints = [NSLayoutConstraint]()
let vertical = NSLayoutConstraint.constraints(withVisualFormat: "V:|[self]|", options: [], metrics: nil, views: ["self": self])
constraints.append(contentsOf: vertical)
let horizontal = NSLayoutConstraint.constraints(withVisualFormat: "H:|[self]|", options: [], metrics: nil, views: ["self": self])
constraints.append(contentsOf: horizontal)
self.superview.addConstraints(constraints)
}
在代码中管理约束有一个基调需要学习,但这是一个值得尝试的技巧。它可以帮助您创建自定义视图,并使故事板更整洁
注1:我在MyCustomView
类中添加了零内容。它现在将显示一个空白视图。您有两个添加内容的选项。首先,您可以继续在代码中编写约束,也可以添加一个.xib文件并在那里创建这个自定义视图的内部结构。第二条路可能就是要走的路
注2:您始终可以在情节提要中添加自定义视图,然后为其约束创建一个出口。然后,您可以设置其约束的动画,以便在需要显示视图时将视图移离屏幕和移到屏幕上
如果你有任何问题,请告诉我。我很乐意扩展我的答案。目前没有办法做到您所描述的 仅自动调整
ViewControllers
的布局,而不仅仅是UIViews
如果您想预览您的自定义UI组件在不同设备中的外观,我强烈建议将UIView
子类化,并使用@IBDesignable
,@IBInspectable
。您还将创建一个XIB
文件,用于布局“小部件”的设计
通过这种方式,您可以像使用任何其他视图一样在Interface Builder中使用自定义组件,并使用上面的设备配置窗格进行预览
例如:假设我有两个自定义组件,一个是带有开关按钮的简单问题,另一个是用于“锁定/解锁”信用卡的组件。两者都依赖于XIB
文件和UIView
子类:
自定义组件1
自定义组件2
现在,我可以将Interface Builder中的视图用作任何视图控制器中的任何其他视图:
最后(现在回答您的问题),我们可以使用设备配置窗格在不同设备上实时预览它的外观:
4S预览
7+预览
private func constrainToSuperView() {
self.translatesAutoresizingMaskIntoConstraints = false
var constraints = [NSLayoutConstraint]()
let vertical = NSLayoutConstraint.constraints(withVisualFormat: "V:|[self]|", options: [], metrics: nil, views: ["self": self])
constraints.append(contentsOf: vertical)
let horizontal = NSLayoutConstraint.constraints(withVisualFormat: "H:|[self]|", options: [], metrics: nil, views: ["self": self])
constraints.append(contentsOf: horizontal)
self.superview.addConstraints(constraints)
}