Questions tagged «nslayoutconstraint»

NSLayoutConstraint是一个约束,用于定义基于约束的布局系统必须满足的两个用户界面对象之间的关系。在iOS 6.0和更高版本的UIKit中可用,在OS X v10.7和更高版本的AppKit中可用。

16
如何使用Swift以编程方式添加约束
自上周以来,我一直在试图解决这个问题,而无需采取任何进一步措施。好的,因此我需要使用以下代码在Swift中以编程方式应用一些约束 :UIView var new_view:UIView! = UIView(frame: CGRectMake(0, 0, 100, 100)); new_view.backgroundColor = UIColor.redColor(); view.addSubview(new_view); var constX:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0); self.view.addConstraint(constX); var constY:NSLayoutConstraint = NSLayoutConstraint(item: new_view, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0); self.view.addConstraint(constY); …

2
setNeedsLayout与setNeedsUpdateConstraints和layoutIfNeeded与updateConstraintsIfNeeded
我知道自动布局链基本上包含3个不同的过程。 更新约束 布局视图(这是我们计算框架的位置) 显示 对我来说,还不完全清楚-setNeedsLayout和之间的内在区别-setNeedsUpdateConstraints。从Apple Docs: setNeedsLayout 若要调整视图的子视图的布局,请在应用程序的主线程上调用此方法。此方法记录请求并立即返回。因为此方法不会强制立即更新,而是等待下一个更新周期,所以您可以使用它在更新任何这些视图之前使多个视图的布局无效。此行为使您可以将所有布局更新合并到一个更新周期,这通常可以提高性能。 setNeedsUpdateConstraints 当自定义视图的属性以影响约束的方式更改时,您可以调用此方法以指示在将来的某个时刻需要更新约束。然后,系统将调用updateConstraints作为其常规布局传递的一部分。在需要约束之前立即全部更新约束,以确保在布局遍之间两次对视图进行多次更改时,您不必不必要地重新计算约束。 当我想在修改约束后为视图添加动画并为更改添加动画时,通常会调用例如: [UIView animateWithDuration:1.0f delay:0.0f usingSpringWithDamping:0.5f initialSpringVelocity:1 options:UIViewAnimationOptionCurveEaseInOut animations:^{ [self.modifConstrView setNeedsUpdateConstraints]; [self.modifConstrView layoutIfNeeded]; } completion:NULL]; 我发现,如果我使用-setNeedsLayout的,而不是-setNeedsUpdateConstraints一切都按预期方式工作,但如果我改变-layoutIfNeeded用-updateConstraintsIfNeeded,动画将不会发生。 我试图做出自己的结论: -updateConstraintsIfNeeded 仅更新约束,但不强制布局进入流程,因此仍保留原始帧 -setNeedsLayout调用也-updateContraints方法 那么什么时候可以使用一个代替另一个呢?关于布局方法,是否需要在约束发生变化的视图或父视图上调用它们?

15
UITextView使用自动布局扩展为文本
我有一个以编程方式完全使用自动布局的视图。我在视图中间有一个UITextView,上面和下面都有项目。一切正常,但是我希望能够在添加文本时扩展UITextView。随着扩展,这应该将其下方的所有内容向下推。 我知道如何以“弹簧和支柱”的方式进行操作,但是是否有自动布局的方式来执行此操作?我能想到的唯一方法是每次需要增长时都删除并重新添加约束。

16
无法同时满足约束条件,将尝试通过打破约束条件进行恢复
以下是我在调试区域中收到的错误消息。它运行正常,除了我收到此错误外,没有其他问题。这会阻止苹果接受该应用程序吗?我如何解决它? 2012-07-26 01:58:18.621 Rolo[33597:11303] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint …

13
我可以更改NSLayoutConstraint的multiplier属性吗?
我在一个超级视图中创建了两个视图,然后在视图之间添加了约束: _indicatorConstrainWidth = [NSLayoutConstraint constraintWithItem:self.view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view2 attribute:NSLayoutAttributeWidth multiplier:1.0f constant:0.0f]; [_indicatorConstrainWidth setPriority:UILayoutPriorityDefaultLow]; _indicatorConstrainHeight = [NSLayoutConstraint constraintWithItem:self.view1 attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.view2 attribute:NSLayoutAttributeHeight multiplier:1.0f constant:0.0f]; [_indicatorConstrainHeight setPriority:UILayoutPriorityDefaultLow]; [self addConstraint:_indicatorConstrainWidth]; [self addConstraint:_indicatorConstrainHeight]; 现在,我想用动画更改乘子属性,但是我不知道如何更改乘子属性。(我在头文件NSLayoutConstraint.h的私有属性中找到了_coefficient,但它是私有的。) 如何更改多重属性? 我的解决方法是删除旧的约束,并为添加新的约束multipler。

6
iOS:如何为新的自动布局约束(高度)设置动画
我以前从未使用过自动布局约束。我正在使用一个小型新应用程序,并且注意到NIB的视图默认为自动布局。因此,我认为我将借此机会与之合作,并尝试弄清苹果公司将如何发展。 第一个挑战: 我需要调整MKMapView的大小,然后将其设置为新位置。如果我以惯常的方式这样做: [UIView animateWithDuration:1.2f animations:^{ CGRect theFrame = worldView.frame; CGRect newFrame = CGRectMake(theFrame.origin.x, theFrame.origin.y, theFrame.size.width, theFrame.size.height - 170); worldView.frame = newFrame; }]; ...然后,无论何时更新同级视图(在我的情况下,UISegmentedControl的标题正在更新[myUISegmentedControl setTitle:newTitle forSegmentAtIndex:0]),MKMapView都会“捕捉”回到其原始高度。 所以,我觉得我想要做的是从等于父视图的HIGHT到可相对于UISegmentedControl,它的顶部改变的MKMapView的限制被覆盖:V:[MKMapView]-(16)-[UISegmentedControl] 我想要的是缩短MKMapView的高度,以便显示地图视图下的某些控件。为此,我认为我需要将约束从固定的全尺寸视图更改为底部约束到UISegmentedControl顶部的约束...并且我希望它随着视图缩小到新大小而进行动画处理。 如何做到这一点? 编辑- 尽管视图的底部确实会立即向上移动170,但该动画没有设置动画: [UIView animateWithDuration:1.2f animations:^{ self.nibMapViewConstraint.constant = -170; }]; 并将其nibMapViewConstraint在IB中连接到底部的垂直空间约束。

7
自动布局:将约束添加到超级视图而非“顶部布局指南”吗?
我在情节提要中的UIViewController中有一个UIView,我想在该空间上添加一个约束以查看与顶部边缘之间的距离。 现在,当我通过ctrl +拖动到ViewController的主视图来执行常规操作时,我只能得到将其设置为顶部布局指南的选项。 这对我来说是个问题,因为在应用程序中,我会在某个时刻将主视图向上移动20-50px,然后发生的事情是我所拥有的视图将不会移动...因为它不与超级视图对齐。 如何在情节提要中手动执行此操作,还是必须以编程方式添加它? 我正在使用xcode 6。

6
删除视图后,约束会发生什么
我的问题很简单,但是在文档中找不到任何信息。 从视图层次结构中删除视图(或移至另一个视图)时,布局约束会发生什么? 例如,让我们有C带有子视图A和的容器B。容器C具有一些约束。然后我们打电话[A removeFromSuperview]。约束条件会发生什么A? 如果再次添加A,会发生什么C?

10
UITableViewCell中的iOS7上的自动布局约束问题
我正在以编程方式使用自动布局约束来布局自定义UITableView单元,并且正确定义了 tableView:heightForRowAtIndexPath: 这是对iOS6的工作得很好,它的外观罚款iOS7以及 但是,当我在iOS7上运行该应用程序时,这是我在控制台中看到的消息: Break on objc_exception_throw to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful. 2013-10-02 09:56:44.847 Vente-Exclusive[76306:a0b] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you …

8
什么时候可以激活/停用布局约束?
我在IB中设置了多组约束,并且我想根据某种状态以编程方式在约束之间进行切换。有一个constraintsA插座集合都标记为已从IB安装,而constraintsB所有插座集合都已从IB 中卸载。 我可以通过编程方式在两组之间切换,如下所示: NSLayoutConstraint.deactivateConstraints(constraintsA) NSLayoutConstraint.activateConstraints(constraintsB) 但是...我不知道何时该做。看来我应该能够一次完成该操作viewDidLoad,但是我无法使其正常工作。我已经打过电话view.updateConstraints(),并view.layoutSubviews()设置约束条件之后,但无济于事。 我确实发现,如果我在viewDidLayoutSubviews所有工作中都按预期设置了约束,我想我想知道两件事... 为什么会出现这种情况? 是否可以从viewDidLoad激活/停用约束?



7
如何在iOS中以编程方式设置纵横比约束?
我已经为视图控制器使用了自动布局。我已经在约束中设置了V和H位置,但是我想知道当按钮变为5s,6和6 Plus时如何增加按钮的大小。这是我为登录按钮添加约束的方式: NSArray *btncon_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:[btnLogin(40)]" options:0 metrics:nil views:viewsDictionary]; [btnLogin addConstraints:btncon_V]; NSArray *btncon_POS_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-100-[btnLogin]-100-|" options:0 metrics:nil views:viewsDictionary]; [self.view addConstraints:btncon_POS_H]; NSArray *btncon_POS_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-70-[Title]-130-[lblFirst]-0-[lblSecond]-20-[textusername]-10-[txtpassword]-10-[btnLogin]" options:0 metrics:nil views:viewsDictionary]; [self.view addConstraints:btncon_POS_V]; 但是我的问题是,尽管它可以控制左右间隙,但由于高度是固定的,因此在iPhone 6和6 Plus中变得越来越张紧。如何根据屏幕尺寸增加尺寸?我认为这可能是纵横比,但是如何在代码中设置纵横比约束?

7
以编程方式添加CenterX / CenterY约束
我有一个UITableViewController,如果没有内容可显示,则不显示任何部分。我添加了一个标签,向用户指示此代码无任何显示: label = UILabel(frame: CGRectMake(20, 20, 250, 100)) label.text = "Nothing to show" self.tableView.addSubview(label) 但是现在,我希望它在水平和垂直方向上居中。通常,我会选择屏幕快照中突出显示的两个选项(高和宽另加一个): 我尝试了以下代码来添加约束,但应用程序因错误而崩溃: label = UILabel(frame: CGRectMake(20, 20, 250, 100)) label.text = "Nothing to show" let xConstraint = NSLayoutConstraint(item: label, attribute: .CenterX, relatedBy: .Equal, toItem: self.tableView, attribute: .CenterX, multiplier: 1, constant: 0) let yConstraint = NSLayoutConstraint(item: label, …

11
宽度和高度是否等于以编程方式使用自动布局的superView?
我一直在网上寻找很多片段,但仍然找不到解决问题的答案。我的问题是我有一个scrollView(SV),我想以编程方式在scrollView(SV)内添加一个按钮,使其具有与superview相同的宽度和高度,即scrollView(SV),以便在用户旋转设备按钮时具有相同的框架scrollView(SV)。如何做NSLayout / NSLayoutConstraint?谢谢

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.