Tag: 自动布局

在Xcode的debugging控制台输出中禁用自动布局约束错误消息

有没有办法(暂时)禁用自动布局错误/警告消息: 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 or constraints and fix it. (Note: If you're […]

删除影响UIView的所有约束

我有一个UIView通过几个约束放置在屏幕上。 一些约束由superview拥有,其他约束由其他祖先拥有(例如,也许是UIViewController的视图属性)。 我想删除所有这些旧的约束,并使用新的约束将其放置在新的地方。 我怎样才能做到这一点,而不必为每个约束创build一个IBOutlet,并且必须记住哪个视图拥有所述约束? 详细说,天真的方法是为每个约束创build一堆IBOutlets,然后包含调用代码,如: [viewA removeConstraint:self.myViewsLeftConstraint]; [viewB removeConstraint:self.myViewsTopConstraint]; [viewB removeConstraint:self.myViewsBottomConstraint]; [self.view removeConstraint:self.myViewsRightConstraint]; 这个代码的问题是即使在最简单的情况下,我也需要创build2个IBOutlets。 对于复杂的布局,可以轻松达到4或8个IBOutlet。 此外,我需要确保我的呼叫,以消除约束正在呼吁正确的看法。 例如,假设myViewsLeftConstraint属于viewA 。 如果我不小心调用了[self.view removeConstraint:self.myViewsLeftConstraint] ,什么都不会发生。 注意: constraintAffectingLayoutForAxis方法看起来很有前景,但是仅用于debugging目的。 更新:我收到的许多答案处理self.constraints , self.superview.constraints ,或这些的一些变体。 这些解决scheme将不起作用,因为这些方法只返回视图所拥有的约束,而不是影响视图的约束。 为了澄清这些解决scheme的问题,请考虑这个视图层次结构: 祖父 父亲 我 儿子 女儿 哥哥 叔叔 现在想象一下,我们创build下面的约束条件,并且总是将它们附加到最近的共同祖先: C0:我:和儿子一样(拥有我) C1:Me:宽度= 100(由Me拥有) C2:我:和兄弟一样高(父亲) C3:我:和叔叔一样(爷爷拥有) C4:我:和爷爷一样(祖父所有) C5:兄弟:跟爸爸一样(父亲) C6:叔叔:和祖父(爷爷)一样, C7:儿子:和女儿一样(由我拥有) 现在想象一下,我们想删除所有影响Me约束。 任何适当的解决scheme应该删除[C0,C1,C2,C3,C4]而不是别的。 如果我使用self.constraints (self是me),我会得到[C0,C1,C7] ,因为这些是我拥有的唯一约束。 显然这是不够的,因为它是缺less[C2,C3,C4] 。 此外,它不必要地删除C7 。 […]

在UITableViewCell上遇到AutoLayout问题

我在xcode 5项目上遇到了自动布局问题。 我正在使用导航控制器内部的普通视图控制器。 上半部分有一个MKMapView ,下半部分有一个UITableView 。 我正在使用storyboards ,并configuration了原型UITableViewCell ,但我通过代码添加约束。 我已经仔细检查了原型中的每个控件,并且没有看到任何configuration的约束。 我为UITableViewCell添加约束时发生问题。 我在单元格中有以下代码: -(void)updateConstraints { [super updateConstraints]; //first remove old constraints [self removeConstraints:self.constraints]; [self.nameLabel removeConstraints:self.nameLabel.constraints]; [self.addressLabel removeConstraints:self.nameLabel.constraints]; [self.rentableSquareFeetLabel removeConstraints:self.rentableSquareFeetLabel.constraints]; [self.lastSaleAmountLabel removeConstraints:self.lastSaleAmountLabel.constraints]; [self.lastSaleDateLabel removeConstraints:self.lastSaleAmountLabel.constraints]; [self.thumbnailImageView removeConstraints:self.thumbnailImageView.constraints]; //then set up constraints NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(_thumbnailImageView, _nameLabel, _rentableSquareFeetLabel, _lastSaleAmountLabel, _addressLabel, _lastSaleDateLabel); [self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_thumbnailImageView(60)]-[_nameLabel(<=200)]-(>=8)-[_rentableSquareFeetLabel]-(>=8)-[_lastSaleAmountLabel]|" options:0 metrics:nil views:viewsDictionary]]; [self addConstraints:[NSLayoutConstraint […]

我可以使用自动布局为横向和纵向提供不同的约束吗?

设备旋转时是否可以更改约束条件? 这可能如何实现? 一个简单的例子可能是两个图像,纵向堆叠,而在横向上并排。 如果这是不可能的,我怎么可以完成这个布局? 我在代码中构build我的视图和约束,而不是使用接口生成器。

NSLayoutAttributeLeft vs NSLayoutAttributeLeading之间的区别

iOS自动NSLayoutAttributeLeading中的NSLayoutAttributeLeft和NSLayoutAttributeLeading什么区别?

删除特定对象的自动布局约束

我有UIImageViewembedded到UIView 。 我的整个应用程序使用AutoLayout ,但我想删除UIImageView constraints 。 Xcode不会允许我删除constraints ,有没有办法禁用它们的特定对象,将它们设置为零,什么?

ScrollView有可疑的可滚动内容高度

我正在做一个非常基本的UIScrollViewtesting。 这是我的设置 它显示我以下AutoLayout错误: ScrollView has ambiguous scrollable content height

在debuggingautolayout时,autoresizing掩码string的含义是什么,例如h = – &v = – & – ?

我想他们必须参考struts和spring模型,但我找不到任何提及它们。 当你NSLog约束时,它们有时会出现在未logging类NSAutoresizingMaskLayoutConstraint的描述string中。 我注意到至less有三种不同的types: h=— , h=–& , h=-&-带有水平和垂直版本。 debugging约束布局时,它们变得很多。

在input时调整UITextField的大小(使用Autolayout)

我有一个UITableViewCell有两个UITextFields(无边框)。 以下约束用于设置水平布局。 @"|-10-[leftTextField(>=80)]-(>=10)-[rightTextField(>=40)]-10-|" 没有什么奇特的,并按预期工作。 正如你可以看到上面的textField具有正确的大小。 下面的文本字段以空文本开始,由于空文本,它是80点宽。 当我在编辑文本字段中input文本时,文本向左滚动,但不会改变其宽度。 我不喜欢,textField的宽度应该调整,而用户键入该文本字段。 在我看来,应该开箱即用。 通过为UIControlEventEditingChanged事件实现一个IBAction ,我可以确认打字实际上改变了UITextField的intrinsicContentSize 。 但是,宽度不会改变,直到textField不再是第一响应者。 如果我把光标放到另一个textField中,编辑后的textField的宽度就被设置了。 我想要的东西有点迟了 这些评论出来的线是我没有任何成功的尝试: – (IBAction)textFieldDidChange:(UITextField *)textField { [UIView animateWithDuration:0.1 animations:^{ // [self.contentView removeConstraints:horizontalConstraints]; // [self.contentView addConstraints:horizontalConstraints]; // [self.contentView layoutIfNeeded]; // [self.contentView setNeedsLayout]; // [self.contentView setNeedsUpdateConstraints]; }]; NSLog(@"%@", NSStringFromCGSize(textField.intrinsicContentSize)); } 有人知道我错过了什么吗? 我可以尝试做什么?

什么是UIView的内容压缩和内容拥抱?

什么是UIView的内容压缩和内容拥抱? 这些如何与视图的内在内容大小相关?