Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.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 为什么UIView的intrinsicContentSize总是返回(-1.0,-1.0)?_Ios_Swift_Uiview_Autolayout - Fatal编程技术网

Ios 为什么UIView的intrinsicContentSize总是返回(-1.0,-1.0)?

Ios 为什么UIView的intrinsicContentSize总是返回(-1.0,-1.0)?,ios,swift,uiview,autolayout,Ios,Swift,Uiview,Autolayout,具有正确自动布局的UIView未返回正确的固有内容大小。我得到(-1.0,-1.0),即使我可以看到它在情节提要和应用程序运行时的大小都是正确的 我尝试创建一个游乐场,创建一个UIView(a)和一个UILabel。 我将标签添加为(a)的子视图,并设置左、右、上、下约束。 我还设置了一些文本,并验证了标签的固有大小是否正确(确实如此)。 My(a)视图返回固有内容大小的(-1.0,-1.0) 我还尝试创建一个带有故事板的新项目。 我在视图中添加了一个UIView(a)并将其居中(X和Y)。 我

具有正确自动布局的UIView未返回正确的固有内容大小。我得到(-1.0,-1.0),即使我可以看到它在情节提要和应用程序运行时的大小都是正确的

我尝试创建一个游乐场,创建一个UIView(a)和一个UILabel。 我将标签添加为(a)的子视图,并设置左、右、上、下约束。 我还设置了一些文本,并验证了标签的固有大小是否正确(确实如此)。 My(a)视图返回固有内容大小的(-1.0,-1.0)

我还尝试创建一个带有故事板的新项目。 我在视图中添加了一个UIView(a)并将其居中(X和Y)。 我在(a)视图中添加了一个UILabel,并约束了左、右、上、下。 我可以看到(a)视图大小正确。当我运行应用程序时,我发现它的大小仍然合适。 My(a)视图返回固有内容大小的(-1.0,-1.0)

考虑到UIView是根据其固有的内容大小(即子视图和相关约束)进行布局的,我觉得这非常奇怪

假设我的标签到(a)视图边缘的约束距离都是0,那么我希望我的(a)视图的内部内容大小等于标签框架的内部内容大小(这是基于标签的内部大小,但这是没有意义的)

我真的不明白视图如何将其框架设置为与其子元素的固有大小相等,而不具有固有的内容大小

(a)视图的框架返回正确的大小,但这并不能真正回答我的问题。此外,它对我的特定情况没有帮助,但这超出了问题的范围。)

考虑到UIView是根据其固有的内容大小(即子视图和相关约束)进行布局的,我觉得这非常奇怪

这只是对“固有内容大小”的误解。普通UIView没有(有意义的)内在内容大小

内部内容大小是某些接口对象(如UILabel和UIButton)实现的属性,因此您不必为其指定高度和宽度约束。这些是包含文本(和/或,在按钮的情况下,包含图像)的特殊接口对象,它们可以调整自身大小以适应该文本

您的UIView不是这样的,基本上根本没有实现内在的内容大小。可以编写一个UIView子类来实现内部内容大小,其行为类似于UILabel或UIButton;但你没有这样做


你在评论中说:


如果我有一个UIView,它只有一个中心X和中心Y约束,并且给定它有一些内容,我想知道autolayout运行后它的大小是多少

很好,但这不是它固有的内容大小。这是它的大小。如果您在视图控制器中,请实现
didLayoutSubviews
,并查看此视图的
bounds.size
。这就是你想要的尺寸

我很好奇我怎么能计算出这个


啊,好的。但是你应该问这个。答案是:调用。

如果我的UIView只有一个中心X和中心Y约束,并且给定它有一些内容,我想知道autolayout运行后它的大小。我认为这将是“内在内容大小”,因为它是一个元素的大小,基于它内部的妥协。鉴于这似乎是一个不正确的假设,我很好奇如何计算这个。(如果需要,我可以重写intrinsicContentSize。)“并且假设它有一些内容”。如果它的某些内容/子视图(如UILabel)具有内在的内容大小和/或高度/宽度约束,则它并不含糊。我在一个示例项目中清楚地说明了这一点。也许我应该把它上传到Github。好吧,我收回我说过的关于歧义的话,但我的回答仍然是正确的:这与内在内容大小无关。谢谢!非常感谢您对intrinsicContentSize行为的澄清。我将给systemLayoutFittingSize一个快照,并将结果发回。systemLayoutSizeFitting似乎正是我所需要的。感谢您的帮助。值
-1
表示