Questions tagged «autolayout»

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


12
如何为约束更改设置动画?
我正在使用来更新一个旧应用,AdBannerView并且当没有广告时,它会滑出屏幕。出现广告时,它会在屏幕上滑动。基本的东西。 旧样式,我将帧设置在动画块中。新样式,我IBOutlet对自动布局约束有一个确定Y位置,在这种情况下,它是距父视图底部的距离,并修改常数: - (void)moveBannerOffScreen { [UIView animateWithDuration:5 animations:^{ _addBannerDistanceFromBottomConstraint.constant = -32; }]; bannerIsVisible = FALSE; } - (void)moveBannerOnScreen { [UIView animateWithDuration:5 animations:^{ _addBannerDistanceFromBottomConstraint.constant = 0; }]; bannerIsVisible = TRUE; } 横幅完全按预期移动,但没有动画。 更新:我重新观看了WWDC 12的“精通自动布局的最佳实践”,其中涵盖了动画。它讨论了如何使用CoreAnimation更新约束: 我尝试使用以下代码,但得到的结果完全相同: - (void)moveBannerOffScreen { _addBannerDistanceFromBottomConstraint.constant = -32; [UIView animateWithDuration:2 animations:^{ [self.view setNeedsLayout]; }]; bannerIsVisible = FALSE; } …


30
如何调整UITextView的内容大小?
是否有一个很好的方法来调整a的大小UITextView以使其内容符合要求?假设我有一个UITextView包含一行文本的: "Hello world" 然后添加另一行文本: "Goodbye world" 在Cocoa Touch中,有没有一种好的方法来获取rect可容纳文本视图中所有行的文本,以便我可以相应地调整父视图? 再举一个例子,在Calendar应用程序中查看便笺字段中的事件-注意单元格(及其UITextView包含的内容)如何扩展以容纳便笺字符串中的所有文本行。

30
UIScrollView可滚动内容大小歧义
资深开发人员,我在Interface Builder(Xcode 5 / iOS 7)中无法使用AutoLayout。这是非常基本和重要的,因此我认为每个人都应该知道它是如何正常工作的。如果这是Xcode中的错误,那就是关键! 因此,每当我拥有这样的视图层次结构时,我都会遇到麻烦: >UIViewController >> UIView >>>UIScrollView >>>>UILabel (or any other comparable UIKit Element) UIScrollView具有固定的约束,例如,每侧50 px(没有问题)。然后,我向UILabel添加一个Top Space约束(没问题)(并且我甚至可以固定标签的高度/宽度,什么都没有改变,但是由于Label的固有尺寸而不必要) 当我向UILabel添加尾随约束时,麻烦就开始了: 例如,尾随空格到:Superview等于:25 现在出现两个警告-我不明白为什么: A)可滚动的内容大小含糊(滚动视图具有模糊的可滚动内容高度/宽度) B)位置错误的视图(标签期望:x = -67实际:x = 207 我在一个全新的项目中做了这个最小的示例,您可以下载该项目,并附上了屏幕截图。如您所见,Interface Builder期望Label位于UIScrollView的边界(橙色虚线矩形)之外。使用“解决问题”工具更新标签的框架将其移到那里。 请注意:如果将UIScrollView替换为UIView,则行为符合预期(Label的框架正确且根据约束)。因此,UIScrollView似乎有问题,或者我错过了一些重要的东西。 当我运行应用程序而未按照IB的建议更新Label的框架时,它的位置恰到好处,恰好位于其应有的位置,并且UIScrollView可滚动。如果我更新框架,则标签将不可见,并且UIScrollView不会滚动。 帮我Obi-Wan Kenobi!为什么布局不明确?为什么视图放错了位置? 您可以在此处下载示例项目,然后尝试确定是否发生了什么情况:https : //github.com/Wirsing84/AutoLayoutProblem

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); …

4
如何使StackPanel的子级向下填充最大空间?
我只想在左侧输入文字,在右侧输入帮助框。 帮助框应一直延伸到底部。 如果取出StackPanel下面的外层,效果很好。 但是出于布局的原因(我正在动态插入UserControls),我需要包装StackPanel。 如您所见,我如何将GroupBox其扩展到的底部StackPanel: VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" Height="Auto" XAML: <Window x:Class="TestDynamic033.Test3" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Test3" Height="300" Width="600"> <StackPanel VerticalAlignment="Stretch" Height="Auto"> <DockPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="Auto" Margin="10"> <GroupBox DockPanel.Dock="Right" Header="Help" Width="100" Background="Beige" VerticalAlignment="Stretch" VerticalContentAlignment="Stretch" Height="Auto"> <TextBlock Text="This is the help that is available on the news screen." TextWrapping="Wrap" /> </GroupBox> <StackPanel DockPanel.Dock="Left" Margin="10" …

7
在Xcode 6中使用AutoLayout约束来模拟方面适应行为
我想使用AutoLayout以一种类似于UIImageView的方面适合内容模式的方式来调整视图的大小和布局。 我在Interface Builder的容器视图内有一个子视图。子视图具有一些我要尊重的固有长宽比。直到运行时,容器视图的大小都是未知的。 如果容器视图的宽高比比子视图宽,那么我希望子视图的高度等于父视图的高度。 如果容器视图的长宽比高于子视图,则我希望子视图的宽度等于父视图的宽度。 无论哪种情况,我都希望子视图在容器视图内水平和垂直居中。 有没有一种方法可以在Xcode 6或以前的版本中使用AutoLayout约束来实现此目的?理想情况下使用Interface Builder,但如果不是这样,则可以通过程序定义此类约束。

21
隐藏视图时如何使用自动布局来移动其他视图?
我已经在IB中设计了自定义单元,将其子类化,然后将插座连接到我的自定义类。我在单元格内容中有三个子视图:UIView(cdView)和两个标签(titleLabel和emailLabel)。根据每行可用的数据,有时我想在单元格中显示UIView和两个标签,有时只显示两个标签。我想做的是,如果我将UIView属性设置为hidden,或者将其从超级视图中删除,则以这种方式设置约束,这两个标签将向左移动。我尝试将UIView领先约束设置为10像素的Superview(单元格内容),并将UILabels领先约束10像素的像素设置为下一个视图(UIView)。稍后在我的代码中 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(IndexPath *)indexPath { ... Record *record = [self.records objectAtIndex:indexPath.row]; if ([record.imageURL is equalToString:@""]) { cell.cdView.hidden = YES; } 我隐藏了cell.cdView,我希望标签向左移动,但是它们在Cell中的位置相同。我试图从超级视图中删除cell.cdView,但它也不起作用。我已附上图片以阐明我的意思。 我知道如何以编程方式执行此操作,因此我没有寻找该解决方案。我想要在IB中设置约束,并且我希望如果其他视图被删除或隐藏,我的子视图将动态移动。可以在IB中使用自动布局执行此操作吗? .....


21
收到“此应用程序正在从后台线程修改自动布局引擎”错误?
使用swift在我的OS X中经常遇到此错误: “此应用程序正在从后台线程修改自动布局引擎,这可能导致引擎损坏和奇怪的崩溃。这将在以后的版本中引发异常。” 我有一个NSWindow,并且正在交换视图到contentView窗口的视图。尝试在窗口上执行操作或在窗口上添加操作时,都会收到错误消息。试图禁用自动调整大小的东西,并且我没有使用自动布局的东西。有什么想法吗?NSApp.beginSheetsubview 有时候很好,什么也没发生,其他时候却完全破坏了我UI,没有负载

29
在容器视图中均匀间隔多个视图
自动布局使我的生活变得困难。从理论上讲,当我切换时它将非常有用,但是我似乎一直在与之抗争。 我做了一个演示项目,试图寻求帮助。有人知道如何在调整视图大小时使视图之间的间隔均匀地增加或减少吗? 这是三个标签(手动在垂直方向上均匀隔开): 我想要的是让他们在旋转时均匀地调整其间距(而不是视图尺寸)。默认情况下,顶视图和底视图向中心倾斜:

9
何时调用layoutSubviews?
我有一个自定义视图,layoutSubview动画期间没有收到消息。 我有一个充满屏幕的视图。它在屏幕底部有一个自定义子视图,如果我更改导航栏的高度,该子视图将在Interface Builder中正确调整大小。layoutSubviews在创建视图时调用,但不再调用。我的子视图已正确布置。如果我将通话中的状态栏关闭,则layoutSubviews即使主视图会为其调整大小设置动画,也根本不会调用该子视图。 在什么情况下layoutSubviews实际上被称为? 我已autoresizesSubviews设置NO为我的自定义视图。在Interface Builder中,我具有顶部和底部的支撑杆以及垂直箭头设置。 难题的另一部分是必须将窗口设置为关键: [window makeKeyAndVisible]; 其他子视图不会自动调整大小。

15
什么是NSLayoutConstraint“ UIView-Encapsulated-Layout-Height”,我应该如何强制其重新进行干净的计算?
我UITableView在iOS 8下运行,并且正在使用情节提要中的自动单元高度。 我的一个单元格包含一个UITextView,我需要它根据用户输入进行收缩和扩展-点击以收缩/扩展文本。 我通过向文本视图添加运行时约束并响应用户事件来更改约束的常量来做到这一点: -(void)collapse:(BOOL)collapse; { _collapsed = collapse; if(collapse) [_collapsedtextHeightConstraint setConstant: kCollapsedHeight]; // 70.0 else [_collapsedtextHeightConstraint setConstant: [self idealCellHeightToShowFullText]]; [self setNeedsUpdateConstraints]; } 每当执行此操作时,我都会将其包装在tableView更新中并调用[tableView setNeedsUpdateConstraints]: [tableView beginUpdates]; [_briefCell collapse:!_showFullBriefText]; [tableView setNeedsUpdateConstraints]; // I have also tried // [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop]; // with exactly the same results. [tableView endUpdates]; 当我这样做时,我的单元格确实会展开(并在执行过程中设置动画),但是我收到了约束警告: 2014-07-31 …

3
Xcode 6中的情节提要中的“限制利润率”是什么
我正在使用自动布局和约束,发现Constrain to marginsXcode 6中有一个选项在Xcode 5中不存在,并且默认情况下已选中。 我创建了一个测试项目,然后UITableView在ViewController上添加了一个,其框架设置为与视图相同的大小并添加了约束 Xcode 6 即使tableview与视图Xframe建议添加-16作为约束,而Xcode 5建议添加间距0,您也可以在此处看到。 现在,当您取消选中“约束到边距”选项时,其行为与Xcode 5相同,建议添加0作为约束 另外,我发现一旦在Constraint中添加约束以Constrain约束,我将无法再在Xcode 5中打开情节提要文件,因此在Xcode 6中绝对是新功能 希望我能够正确解释我的问题。我想了解“限制利润率”的实际作用,以及何时应该使用和不应该使用它。如果这很简单明显,我对此表示歉意。 编辑 我在这里的讨论中发现了一些有关布局边距的信息,我想知道这是否与此有关。

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.