Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS界面生成器自动约束问题_Ios_Swift_Xcode_Interface Builder_Swift4 - Fatal编程技术网

iOS界面生成器自动约束问题

iOS界面生成器自动约束问题,ios,swift,xcode,interface-builder,swift4,Ios,Swift,Xcode,Interface Builder,Swift4,我目前正试图学习iOS开发,但是我被界面生成器卡住了。我想做的实际上是基本的观点。不幸的是,我对“小于或等于”的关系感到相当困惑。我认为,如果将约束设置为小于或等于,这将意味着当有足够的空间时,它将有恒定的最大大小,否则它将更小。事实证明,不管怎样,它总是有最大的尺寸,这不是我想要达到的 在iPhone 11上,界面如下所示: 在iPhone 8上,界面如下所示: 当然,我现在没有关于自动约束的所有必要知识,但也许有人知道在这种情况下哪里有问题?此外,我也会感谢任何关于界面生成器的好教程或一

我目前正试图学习iOS开发,但是我被界面生成器卡住了。我想做的实际上是基本的观点。不幸的是,我对“小于或等于”的关系感到相当困惑。我认为,如果将约束设置为小于或等于,这将意味着当有足够的空间时,它将有恒定的最大大小,否则它将更小。事实证明,不管怎样,它总是有最大的尺寸,这不是我想要达到的

在iPhone 11上,界面如下所示:

在iPhone 8上,界面如下所示:

当然,我现在没有关于自动约束的所有必要知识,但也许有人知道在这种情况下哪里有问题?此外,我也会感谢任何关于界面生成器的好教程或一些好习惯

谢谢
Peter

听起来您是在试图根据设备的大小在输入之间创建间隔?我不知道它是否会像你期望的那样,但我以前在不同的情况下都必须这样做。您可以使用类似这样的
NSLayoutConstraint
子类来实现您想要的功能。本质上,根据约束是垂直还是水平,此类将在运行时计算屏幕大小,并根据您给定的百分比值修改约束大小

///基于乘数计算大小的布局约束。
类PercentLayoutConstraint:NSLayoutConstraint{
@IBInspectable var marginPercent:CGFloat=0
变量屏幕大小:(宽度:CGFloat,高度:CGFloat){
返回(UIScreen.mainScreen().bounds.width,UIScreen.mainScreen().bounds.height)
}
重写func awakeFromNib(){
super.awakeFromNib()
guard marginPercent>0其他{return}
NSNotificationCenter.defaultCenter().addObserver(self,
选择器:#选择器(layoutDidChange),
名称:UIDeviceOrientationIDChangeNotification,
对象:无)
}
/**
根据方向和百分比重新计算常数。
*/
func layoutdichange(){
guard marginPercent>0其他{return}
切换第一属性{
大小写.Top、.TopMargin、.Bottom、.BottomMargin:
常数=屏幕大小。高度*边缘百分比
大小写前导、.LeadingMargin、.Trailing、.TrailingMargin:
常数=屏幕大小。宽度*边缘百分比
默认值:中断
}
}
脱硝{
guard marginPercent>0其他{return}
NSNotificationCenter.defaultCenter().removeObserver(自)
}
}

来源:

所以,这似乎是你想要的东西。这是在6s上:

这是在iPhone 11上:

这是iPhone 6s上的一个很好的衡量标准:

如您所见,有四个“组”-两个标签、标签和文本字段、第二个标签和文本字段以及按钮。它们在两个屏幕上从上到下均匀分布

这主意不错,不是吗

那么这是如何做到的呢?简单。一个垂直堆栈视图填充屏幕,分布设置为等间距。在其中,包含每个组(按钮除外)的UIView,每个UIView通过其自身的高度约束给定一个固定高度。还有一点,但这是问题的核心。一旦你做到了,你当然可以根据需要进一步调整


绝对没有代码;整个过程在Xcode的nib编辑器(“interface builder”)中很快就完成了配置。

“我认为,如果约束设置为小于或等于,这将意味着当有足够的空间时,它的最大大小将保持不变,否则它将变小。”,你需要两个约束:不平等和一个较低优先级的“小”约束,当平等部分不能满足时,给不平等一些目标。但是,很难帮助,因为你没有告诉我们你想要实现什么布局。嗨,matt,我正在努力实现布局,使每台设备上的外观都与第一张屏幕截图(iPhone11)上的外观非常相似。但这意味着什么?不同的手机可能会更短。那么到底应该发生什么呢?如果你不能用语言告诉我,你怎么能在约束中告诉自动布局引擎?嗨,没错,不同的手机可能会更短。因此,我想要的是,如果设备的屏幕更小,则使堆栈视图之间的间隙更小。我想了解一下,我刚刚开始ios的冒险。