如何让自动布局在 Xcode 中工作

     2023-03-13     283

关键词:

【中文标题】如何让自动布局在 Xcode 中工作【英文标题】:how to get auto layout to work in Xcode 【发布时间】:2013-07-31 20:36:50 【问题描述】:

我查看了http://developer.apple.com/library/ios/#recipes/xcode_help-interface_builder/articles/UnderstandingAutolayout.html,但解释很模糊。

我在 iOS 6 上。我有一个带有两个子视图的视图控制器,一个在另一个之上:

我想使用自动布局来设置视图,如果我以编程方式更改顶视图的框架,底视图将调整大小以适应顶视图的新框架。也就是说,如果我增加顶视图的高度,底视图的高度应该降低以保持两个视图之间的相同间隔;如果我降低顶视图的高度,则会发生相反的情况。

我在 Xcode 中为这两个视图获得的默认约束是:

如果我按住 Command 并调整顶部(地图)视图的大小,底部(表格视图)似乎会正确地垂直收缩或扩展以遵守它们之间的空间限制。

但是,当我尝试通过代码修改顶视图的框架或边界时,例如:

self.topView.frame = CGRectMake(0, 0, 320, 514);

底视图不会缩小。 那我错过了什么?

【问题讨论】:

【参考方案1】:

你不能这样修改self.topView.frame。设置框架是自动布局的工作。您需要修改约束,然后让自动布局更新框架。

在您的视图控制器中创建NSLayoutConstraint 类型的插座:

@property (nonatomic, strong) IBOutlet NSLayoutConstraint *topViewHeightConstraint;

将插座连接到故事板顶视图上的 height=127 约束。 See this answer 如果您需要更多帮助将插座连接到约束。

然后,要改变顶视图的高度,并让自动布局也更新底视图的框架,设置约束的常量:

self.topViewHeightConstraint.constant = 514;

在运行循环结束时(不是立即,而是在屏幕更新之前),自动布局将修改两个视图的框架以满足更改后的约束。

【讨论】:

哦,好的,我明白了。我认为他们的工作方式相反:框架的变化触发了约束的变化。谢谢!最后一件事,如果您愿意,我可以创建一个单独的问题,但是,我尝试将 NSLayoutConstraint.constant 值更改包装在 UIView animateWithDuration:... 调用中,希望能够为调整大小设置动画,但它没有动画。我现在正要直接尝试 CoreAnimation,但想知道您是否知道它是否可能? 您需要强制 UIKit 在动画块内执行布局传递。您可以在块内执行[self.topView layoutIfNeeded],或者如果您使用带有选项的完整动画方法,您可以传递UIViewAnimationOptionLayoutSubviews 标志。

如何让 SpriteKit Playgrounds 在 Xcode 8 beta 中工作?

】如何让SpriteKitPlaygrounds在Xcode8beta中工作?【英文标题】:HowdoIgetSpriteKitPlaygroundsworkinginXcode8beta?【发布时间】:2016-07-2315:08:20【问题描述】:我希望能够在Playgrounds中轻松地制作我的SpriteKit代码原型。这在Xcode7中运行良好importUIK... 查看详情

如何让自动填充在 VBA 中工作?

】如何让自动填充在VBA中工作?【英文标题】:HowtogetautofillworkinginVBA?【发布时间】:2017-07-2007:59:55【问题描述】:我正在尝试使自动填充选项起作用。对于一种情况,我只需要复制单元格中的值。在其他公式中(但我想这与复... 查看详情

无法让 RestKit 在 Xcode 4.6 中工作

】无法让RestKit在Xcode4.6中工作【英文标题】:CannotgetRestKittoworkinXcode4.6【发布时间】:2013-02-1300:42:23【问题描述】:我正在尝试让RestKit工作,但我不断收到错误,这是Xcode4.6,目标iOS是6.1我正在遵循本指南:https://github.com/RestKit/R... 查看详情

如何让 TLinkLabel 在 Delphi 中工作?

】如何让TLinkLabel在Delphi中工作?【英文标题】:HowdoImakeaTLinkLabelworkinDelphi?【发布时间】:2009-02-1216:55:07【问题描述】:我在我的表单上放了一个TLinkLabel,用一个包含有效HTML链接的标题填充它,并得到了一些漂亮的蓝色下划线... 查看详情

无法让 Angular 控制器在 MVC 布局中工作

】无法让Angular控制器在MVC布局中工作【英文标题】:Can\'tGetAngularControllertoworkinMVCLayout【发布时间】:2015-09-0422:59:15【问题描述】:我有一个MVC应用程序,它使用_Layout页面在每个页面中呈现标题和侧边栏。我正在尝试使用Angular... 查看详情

$packageName.$activityClass 如何在布局 XML 文件中工作?

】$packageName.$activityClass如何在布局XML文件中工作?【英文标题】:Howdoes$packageName.$activityClassworkinlayoutXMLfiles?$packageName.$activityClass如何在布局XML文件中工作?【发布时间】:2014-07-2610:05:12【问题描述】:ADT现在生成具有以下属性... 查看详情

无法让 $(this) 在 jQueryUI 自动完成中工作

】无法让$(this)在jQueryUI自动完成中工作【英文标题】:Can\'tget$(this)workinginjQueryUIautocomplete【发布时间】:2011-05-1623:43:40【问题描述】:我正在尝试使用jQueryUI创建一个通用的自动完成脚本。自动完成应该适用于每个:<inputtype=\'... 查看详情

startUpdatingLocation 不再在 XCode 6.1 中工作

】startUpdatingLocation不再在XCode6.1中工作【英文标题】:startUpdatingLocationnolongerworkinginXCode6.1【发布时间】:2014-10-2620:35:39【问题描述】:我什至无法让最简单的位置更新代码工作。我有一个位置应用程序可以正常运行一年多,现在... 查看详情

如何使 UIImage 在 Objective-c 的 Xcode 中工作

】如何使UIImage在Objective-c的Xcode中工作【英文标题】:howtomakeUIImageworkinXcodeofObjective-c【发布时间】:2017-08-2408:07:04【问题描述】:我想用以下代码显示UIImage:UIImageView*image=[[UIImageViewalloc]initWithFrame:CGRectMake(0,0,500,500)];image.image=[UII 查看详情

如何使动画在 Xcode 5 iOS 7 中工作?

】如何使动画在Xcode5iOS7中工作?【英文标题】:HowtomakeanimationworkinXcode5iOS7?【发布时间】:2014-06-1519:54:40【问题描述】:我有一个为ios6开发的旧应用程序,我想通过使用适用于iOS7的Xcode5来发布它,除了我的动画之外一切正常。... 查看详情

[NSBundle loadNibNamed:owner:] 如何在 Xcode 3.1 中工作?

】[NSBundleloadNibNamed:owner:]如何在Xcode3.1中工作?【英文标题】:Howdoes[NSBundleloadNibNamed:owner:]workinXcode3.1?【发布时间】:2010-11-1818:26:04【问题描述】:我正在使用较旧的Mac进行开发。我无法访问运行Xcode3.1的较新Mac,但我想确保我的... 查看详情

如何让别名在所有 shell 中工作?

】如何让别名在所有shell中工作?【英文标题】:HowdoImakealiasesworkacrossalltheshells?【发布时间】:2014-04-1916:37:10【问题描述】:我一直在尝试让别名在bashshell中工作。现在,假设我愿意别名yum=\'yum-v\'在我的shell中。当我从CLI运行命... 查看详情

让 Python 在 Cocoa App 中工作

】让Python在CocoaApp中工作【英文标题】:GettingPythontoworkinCocoaApp【发布时间】:2014-02-0709:48:37【问题描述】:我目前正在尝试让Python在Cocoa应用程序中工作。我的第一步是包含Python,以便Xcode可以链接它。由于OSXMavericks,Python.framew... 查看详情

第三方库如何在 Objective-C 和 Xcode 中工作?

】第三方库如何在Objective-C和Xcode中工作?【英文标题】:Howdothird-partylibrariesworkinObjective-CandXcode?【发布时间】:2011-08-3021:59:56【问题描述】:Objective-C和Xcode非常新(2周),我正在尝试添加我的第一个“外部”库,名为restkit,... 查看详情

高度的自动布局在 iOS 8 中工作但在 iOS 7 中不工作

】高度的自动布局在iOS8中工作但在iOS7中不工作【英文标题】:AutolayoutforHeightworkinginiOS8butnotworkinginiOS7【发布时间】:2015-08-0804:49:28【问题描述】:我的UIImageView在视图中,它将从服务器下载图像,下载完成后,我的UIImageView高度... 查看详情

如何让 scrollViewDidScrollToTop 在 UITableView 中工作?

】如何让scrollViewDidScrollToTop在UITableView中工作?【英文标题】:HowcanIgetscrollViewDidScrollToToptoworkinaUITableView?【发布时间】:2010-01-2123:25:42【问题描述】:我认为标题说明了一切。我希望在用户滚动到表格视图顶部时收到通知。我尝... 查看详情

如何让 toastr 在 Typescript 中工作

】如何让toastr在Typescript中工作【英文标题】:HowtogettoastrtoworkinTypescript【发布时间】:2015-11-2522:13:09【问题描述】:我正在将一个项目转换为Typescript。我在使用toastr时遇到问题。importtoastrfrom"toastr";我用Nuget下载了typescript定义文... 查看详情

如何让 @apply 在 TailwindCSS 中工作?

】如何让@apply在TailwindCSS中工作?【英文标题】:HowdoIget@applytoworkinTailwindCSS?【发布时间】:2020-04-1211:34:00【问题描述】:我似乎无法让TailwindCSS@apply工作。VisualStudioCode似乎无法识别我的代码。.btn@applymb-2bg-purple-600text-gray-100font-bo... 查看详情