Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.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
Iphone 如何使用自动布局调整视图?_Iphone_Objective C_Autolayout - Fatal编程技术网

Iphone 如何使用自动布局调整视图?

Iphone 如何使用自动布局调整视图?,iphone,objective-c,autolayout,Iphone,Objective C,Autolayout,我正在示例应用程序中使用AutoLayout。我有三个视图,topView、middleView和bottomView。以下是我需要的约束条件 俯视图: 始终从x原点10开始 左右边缘10 高度应根据屏幕边界(或superview)而变化 middleView: 在俯视图和中视图之间应有10像素的垂直边距 左右边缘10 高度应根据屏幕边界(或superview)而变化 底部视图: 中间和底部视图之间应有10像素的垂直边距 左右边缘10 高度应该是恒定的,比如说30 我想根据设备屏幕大小,底部视图

我正在示例应用程序中使用AutoLayout。我有三个视图,topView、middleView和bottomView。以下是我需要的约束条件

俯视图:

  • 始终从x原点10开始
  • 左右边缘10
  • 高度应根据屏幕边界(或superview)而变化
  • middleView:

  • 在俯视图和中视图之间应有10像素的垂直边距
  • 左右边缘10
  • 高度应根据屏幕边界(或superview)而变化
  • 底部视图:

  • 中间和底部视图之间应有10像素的垂直边距
  • 左右边缘10
  • 高度应该是恒定的,比如说30
  • 我想根据设备屏幕大小,底部视图y原点应该改变,以便中间视图和顶部视图大小可以调整。 这里的问题是没有办法找到,底视图的y原点应该是什么,界面提供了永久性约束,如:

  • 顶部空间到superview,用于中间视图
  • 顶部空间到superview,用于底部视图
  • 这是因为无法确定视图的高度。 唯一的困难是确定顶视图和中间视图的高度。

    您似乎并不关心中视图和顶视图的高度,因此我将为您做一个决定:它们的高度相同。将以下约束添加到公共superview,这三个视图(_topView、_middleView和_bottomView)都是其子视图:

    NSString *vfl = @"V:|-(10)-[topView]-(10)-[middleView]-(10)-[bottomView(==30)]-(10)-|";
    NSDictionary *dict = @{@"topView":_topView,@"middleView":_middleView,@"bottomView":_bottomView};
    NSArray *a = [NSLayoutConstraints 
                         constraintsWithVisualFormat: vfl
                                             options: 0
                                             metrics: nil
                                               views: dict];
    
    还要确保它们水平对齐:

    NSArray *b = [NSLayoutConstraints 
               constraintsWithVisualFormat: @"H:|-(10)-[topView]-(10)-|"
                                   options: 0
                                   metrics: nil
                                     views: dict];
    NSArray *c = [NSLayoutConstraints 
                constraintsWithVisualFormat: @"H:|-(10)-[middleView]-(10)-|"
                                    options: 0
                                    metrics: nil
                                      views: dict];
    NSArray *d = [NSLayoutConstraints 
                constraintsWithVisualFormat: @"H:|-(10)-[bottomView]-(10)-|"
                                    options: 0
                                    metrics: nil
                                      views: dict];
    
    编辑

    正如您所说,中间视图将是一个标签。标签具有固有的内容大小。如果不设置此视图的高度,自动布局系统将本能地知道该做什么。(整洁,对吗?)通过将_topView的顶部固定到superview的顶部,将其底部固定到标签的顶部,可以自动计算其高度。我修改了代码以反映这一点

    编辑2


    要在代码中添加约束,请找到这三个视图的共同祖先(superview),然后编写
    [superview addConstraints:a]、[superview addConstraints:b],等等。
    确保IB中的自动布局已关闭,并且将
    TranslateResizengMasksToConstraints
    设置为

    这样做的问题是顶部和中部的高度(以及底部的位置)不明确。你希望他们如何工作?这些是什么类型的视图?它们的高度是如何工作的?高度是否取决于它们的内容?等此外,它们是什么类型的视图?UIExtView,UIImageView?也许他们是通过。。。中视图高度等于俯视高度除以2?或者类似的事情。不过,你需要定义高度。Autolayout的美妙之处在于它是描述性的:你描述了你想要的,系统负责计算。但是,您需要描述希望系统如何调整俯视图和中视图的高度。“高度应该不同”并不是系统可以使用的描述。你为什么不试着向我们描述你的意图,我们可以帮助你向系统描述它?(例如,中间视图的高度应该是顶视图高度的一半。)@Maarten你说的比我想说的要好得多:)请向我们描述一下你希望它们如何工作,我们将尝试找出产生这种效果的约束条件。顶视图和中间视图之间没有关系,因此我无法用语言表达。我只想知道,我有三个视图,它们的位置是固定的,最后一个视图的高度是固定的。其他两个视图的高度将根据设备屏幕大小而变化。因此,无论我在iPhone 5还是iPhone 4上运行我的应用程序,它都应该调整视图。它不应该扭曲。因此,请建议我如何指定约束,以便它考虑高度。似乎你不太清楚你希望你的应用程序看起来像什么。。。你不在乎顶视图是1分高,中间视图是499分高吗?请参考我的上述评论。谢谢你的快速回复,但我使用的是IB,你能告诉我使用IB的情况吗?事实上,不,我不能。不是因为我不想,而是因为我永远无法让IB按照我想要的方式工作。尽管苹果说IB是最好的方式,但我发现autolayout代码更易于使用和调试。我认为XCode 5中的IB使事情变得简单了一点,但我们还不能谈论它。我建议您尝试使用代码,就像一个实验。也许你会喜欢的!:-)好的,我会尝试,但我从来没有使用过自动布局的代码,所以首先我需要理解它。如果你建议一些相同的链接,那将是非常好的。因为我没有找到我的好教程自动布局使用代码。我已经改变了我的答案一点,以帮助你一路走来。最好的建议是Erica Sadun的书“自动布局去神秘化”。她完全改变了我对自动布局的看法。否则,这是一个很好的简要概述:。苹果的文档不是很有用,但也许你会学到一些东西: