Questions tagged «autolayout»

自动布局是针对OS X和iOS的基于约束的描述性用户界面布局系统。

16
更新到Xcode 8后的布局问题
升级到Xcode 8之后,这是屏幕之一的前后。我所做的只是打开main.storyboard,然后在其中构建并运行我的应用程序。在我的版本控制中,我可以看到Xcode仅在打开它后对main.storyboard进行了很多更改。每当我删除这些更改时,都可以在Xcode 7.3.1中看到使用的内容。但是,当我使用情节提要重新打开界面生成器时,我看到这些更改又恢复了原样。 有什么我可以做的吗? 在Xcode 8之前 更新到Xcode 8之后
102 ios  xcode  autolayout  xcode8  ios10 



29
是否可以将AutoLayout与UITableView的tableHeaderView一起使用?
由于我发现AutoLayout我到处都使用它,现在我正尝试将其与一起使用tableHeaderView。 我做了一个subclass的UIView加入一切(标签等...),我想用自己的约束,那么我将此CustomView到UITableView“ tableHeaderView。 一切都工作得很好,除了UITableView始终显示上面的CustomView,通过以上我指的CustomView是下的UITableView,因此它不能被看到! 看来,无论我做什么,对height的UITableView“ tableHeaderView是始终 0(所以是宽度,x和y)。 我的问题:无需手动设置框架就可以完成此操作吗? 编辑:我正在使用 的CustomView' subview有这些约束: _title = [[UILabel alloc]init]; _title.text = @"Title"; [self addSubview:_title]; [_title keep:[KeepTopInset rules:@[[KeepEqual must:5]]]]; // title has to stay at least 5 away from the supperview Top [_title keep:[KeepRightInset rules:@[[KeepMin must:5]]]]; [_title keep:[KeepLeftInset rules:@[[KeepMin must:5]]]]; [_title keep:[KeepBottomInset rules:@[[KeepMin must:5]]]]; 我使用的是方便的库'KeepLayout',因为手动编写约束会花费很多时间,而且单个约束的行太多,但是这些方法是不言自明的。 …

14
UIStackView“无法同时满足约束”对“压缩”的隐藏视图
当我的UIStackView“行”被压缩时,它们会AutoLayout发出警告。但是,它们显示正常,除了这些日志记录之外,没有其他问题: 无法同时满足约束条件。以下列表中的约束中至少有一个是您不想要的约束。尝试以下操作:(1)查看每个约束,并尝试找出不期望的约束;(2)查找添加了一个或多个不必要约束的代码并进行修复。(注意:如果您看NSAutoresizingMaskLayoutConstraints不懂,请参阅该UIView属性的文档translatesAutoresizingMaskIntoConstraints)( 因此,我不确定如何解决此问题,但是除了烦人之外,它似乎并没有破坏任何东西。 有人知道如何解决吗?有趣的是,布局约束经常用“ UISV隐藏”标记,表明在这种情况下也许应该忽略子视图或某些东西的高度最小值?

13
由于Xcode 8和iOS10,视图在viewDidLayoutSubviews上的大小不正确
似乎在Xcode 8上viewDidLoad,所有viewcontroller子视图都具有相同的1000x1000大小。奇怪的事情,但没关系,viewDidLoad从来没有一个正确调整视图大小的好地方。 但是viewDidLayoutSubviews是! 在我当前的项目中,我尝试打印按钮的大小: - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; NSLog(@"%@", self.myButton); } 日志显示myButton的大小为(1000x1000)!然后,例如,如果我单击按钮,日志将显示正常大小。 我正在使用自动版式。 是虫子吗?
94 ios  autolayout  ios10  xcode8 

5
iOS自动布局:两个宽度相等的按钮并排
我目前在使用AutoLayout时遇到困难。我正在使用界面生成器,并试图将两个宽度相等的按钮并排放置,如下图所示。 从下面的预览图像中,我的titleImage已被适当地约束并且可以正确显示,但是按钮却没有。我已经尝试过将button 1与titleImage的前端对齐,将button2与titleImage的后端对齐,但是此时两个按钮之间的宽度分布变得偏斜,如下所示。 我的目标是了解缺少哪些约束,并且无论设备如何,都应将其应用于两个按钮以保持相等的宽度。如果可能的话,我想通过界面生成器来实现,而不是其他代码。
92 ios  iphone  xcode  autolayout 


16
删除所有影响UIView的约束
我有一个通过多个约束放置在屏幕上的UIView。某些约束由超级视图拥有,而其他约束则由其他祖先拥有(例如,UIViewController的view属性)。 我想删除所有这些旧约束,并使用新约束将其放置在新位置。 在不为每个约束创建IBOutlet且必须记住哪个视图拥有所述约束的情况下,如何做到这一点? 详细地说,幼稚的方法是为每个约束创建一堆IBOutlet,然后涉及调用代码,例如: [viewA removeConstraint:self.myViewsLeftConstraint]; [viewB removeConstraint:self.myViewsTopConstraint]; [viewB removeConstraint:self.myViewsBottomConstraint]; [self.view removeConstraint:self.myViewsRightConstraint]; 此代码的问题在于,即使在最简单的情况下,我也需要创建2个IBOutlet。对于复杂的布局,这可以轻松达到4或8个所需的IBOutlets。此外,我需要确保在适当的视图上正在调用删除约束的调用。例如,假设myViewsLeftConstraint归拥有viewA。如果我不小心打了电话[self.view removeConstraint:self.myViewsLeftConstraint],什么也不会发生。 注意:方法constraintsAffectingLayoutForAxis看起来很有希望,但仅用于调试目的。 更新:很多我收到处理问题的答案self.constraints,self.superview.constraints或一些人的变种。这些解决方案将不起作用,因为这些方法仅返回视图所拥有的约束,而不会影响那些约束视图。 为了阐明这些解决方案的问题,请考虑以下视图层次结构: 祖父 父亲 我 儿子 女儿 哥哥 叔叔 现在想象我们创建以下约束,并将它们始终附加到最接近的共同祖先: C0:我:与儿子(我拥有)同上 C1:我:宽度= 100(属于我) C2:我:与兄弟(父亲拥有)相同的身高 C3:我:和叔叔一样(祖父拥有) C4:我:与祖父(祖父拥有)同左 C5:兄弟:与父亲相同(父亲拥有) C6:叔叔:与祖父(祖父拥有)相同 C7:儿子:和女儿(我所有)同左 现在想象我们要删除所有影响的约束Me。任何适当的解决方案都应该删除,[C0,C1,C2,C3,C4]并且别无其他。 如果我使用self.constraints(自我就是我),我将得到[C0,C1,C7],因为这些是我所拥有的唯一约束。显然,仅仅删除它是不够的,因为它丢失了[C2,C3,C4]。此外,它是C7不必要地删除。 如果我使用self.superview.constraints(自我就是我),我会得到[C2,C5],因为那是父亲的约束。显然,我们无法删除所有这些内容,因为它们C5与完全无关Me。 如果我使用grandfather.constraints,我会得到[C3,C4,C6]。同样,我们不能删除所有这些内容,因为它们C6应保持不变。 蛮力方法是循环在每个视图的祖先(包括其本身)的,并且如果看到firstItem或secondItem是视图本身; 如果是这样,请删除该约束。这将导致正确的解决方案,return [C0,C1,C2,C3,C4],并且仅是那些约束。 但是,我希望有一个比必须遍历整个祖先列表更优雅的解决方案。

12
如何使用自动布局设置tableHeaderView(UITableView)的高度?
最近3或4个小时,我一直在用头撞墙,但似乎无法解决。我有一个带有全屏UITableView的UIViewController(屏幕上还有其他内容,这就是为什么我不能使用UITableViewController的原因),并且我想让tableHeaderView可以使用自动布局来调整大小。不用说,这是不合作的。 请参见下面的屏幕截图。 因为overviewLabel(例如“在此处列出概览信息。”文本)具有动态内容,所以我使用自动布局来调整其大小,并且它是superview。除了tableHeaderView,它一切都很好地调整了大小,它位于hiearchy中的Paralax Table View的正下方。 我发现调整标题视图大小的唯一方法是通过编程,使用以下代码: CGRect headerFrame = self.headerView.frame; headerFrame.size.height = headerFrameHeight; self.headerView.frame = headerFrame; [self.listTableView setTableHeaderView:self.headerView]; 在这种情况下,headerFrameHeight是tableViewHeader高度的手动计算,如下所示(innerHeaderView是白色区域,或者第二个“ View”,headerView是tableHeaderView): CGFloat startingY = self.innerHeaderView.frame.origin.y + self.overviewLabel.frame.origin.y; CGRect overviewSize = [self.overviewLabel.text boundingRectWithSize:CGSizeMake(290.f, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: self.overviewLabel.font} context:nil]; CGFloat overviewHeight = overviewSize.size.height; CGFloat overviewPadding = ([self.overviewLabel.text length] > 0) ? 10 : …

8
如何在运行时更改约束优先级
我有一个具有动态高度的视图,并且我试图在运行时更改此视图高度优先级。 这是我的代码部分; if (index == 0) { surveyViewHeightConstraint.constant = 0; surveyViewHeightConstraint.priority = 1000; } else if (index == 1) { surveyViewHeightConstraint.constant = 163; surveyViewHeightConstraint.priority = 500; } 我正在通过按钮操作更改索引。运行此代码时,出现此错误: *** Assertion failure in -[NSLayoutConstraint setPriority:], /SourceCache/Foundation/Foundation-1141.1/Layout.subproj/NSLayoutConstraint.m:174 我在这里有什么错?

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中变得越来越张紧。如何根据屏幕尺寸增加尺寸?我认为这可能是纵横比,但是如何在代码中设置纵横比约束?

6
以编程方式创建布局约束
我知道很多人已经问过很多问题,但是即使有了答案,我也无法解决。 当我处理情节提要上的约束时,这很容易,但是在代码中我很难过。例如,我尝试让视图停留在右侧,并根据屏幕方向显示屏幕高度。这是我的代码: UIView *myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 748)]; myView.backgroundColor = [UIColor redColor]; [self.view addSubview:myView]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-[myView(>=748)]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(myView)]]; 它不满足某些约束。我看不出有什么问题。另外,为什么我不能使用像这样的属性self.myView而不是像这样的局部变量myView?

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, …

4
使用自动布局动态更改子视图后调整视图的大小
我不能为上帝的爱而努力,而这正是调整规模的Superview的用处。 我有一个UIView *superview 4 UILabels。2个用作其他2个的标头。 所有4个内容都是动态的,都来自数据库。 SizeToFitvs vs SizeThatFits:(CGSize)vs UIView systemLayoutSizeFittingSize:,通过UILayoutFittingCompressedSize或UILayoutFittingExpandedSize。 我以编程方式使用自动布局,并将Superview高度设置为等于或大于虚拟数字。 在那里,我如何使用这些SizeToFitVS sizeThatFits:(CGSize)VS UIView systemLayoutSizeFittingSize:,无论是传球UILayoutFittingCompressedSize还是UILayoutFittingExpandedSize。我在这里已经阅读了很多技巧,但最终没有结果。 我是否需要重新计算特定位置的Superview约束。Maby在其控制器类中将高度设置为“ @property”,然后删除并读取它吗?Atm我已尝试将所有内容放到任何地方,然后再放一些。我仍然得到相同大小的最终结果,虚拟高度和文本漂浮在外面。即使在子视图上设置了clipsToBound之后。 我正在挠..帮助

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.