Tag: autolayout

topLayoutGuide在子视图控制器中

我有一个UIPageViewController与半透明的状态栏和导航栏。 它的topLayoutGuide是64像素,正如所料。 但是, UIPageViewController的子视图控制器报告0像素的topLayoutGuide ,即使它们显示在状态栏和导航栏下方。 这是预期的行为? 如果是这样的话,真正的topLayoutGuide下定位子视图控制器视图的最好方法是什么? (使用parentViewController.topLayoutGuide ,我认为这是一个黑客)

带iOS自动布局约束的UIScrollView:子视图的大小错误

我试图在代码中生成一个视图。 这里是我的视图对象的层次结构 UIScrollView中 的UIView 的UIButton ScrollView应该与窗口大小相同。 button应该尽可能大。 我使用iOS自动布局,所以我的所有对象的约束string看起来像这样 H:|[object]| V:|[object]| 我也为每个对象设置了translatesAutoresizingMaskIntoConstraints为NO 。 问题是,button只获取默认的button大小。 它的父视图对象(UIView)只获取其子视图所需的大小。 红色:UIScrollView /黄色:UIView 我怎样才能强制这些意见像scrollView一样大? 当我使用UIView而不是UIScrollView时,一切都很好… 这是一些代码: – (void) viewDidLoad { [super viewDidLoad]; // SCROLL VIEW UIScrollView* scrollView = [UIScrollView new]; scrollView.backgroundColor=[UIColor redColor]; scrollView.translatesAutoresizingMaskIntoConstraints = NO; //CONTAINER VIEW UIView *containerView = [UIView new]; containerView.translatesAutoresizingMaskIntoConstraints = NO; containerView.backgroundColor = [UIColor yellowColor]; [scrollView addSubview:containerView]; // […]

问题与iOS 8自动布局(代码在iOS 7完美的作品)

我有一个使用auto-layout构build的应用程序,当我在iOS 7设备上运行它时,一切仍然按预期工作,但是当我在iOS 8设备上运行它时,我的某些约束会变得有点古怪。 我在另一个应用程序中遇到过类似的问题,但这不是一个大问题。 现在,我开始怀疑它是否是iOS 8 SDK中的错误,或者是否有处理iOS8中的自动布局的新方法,我不知道。 这里是我的设置:我有一个内置UIImageView的UIView 。 视图和图像视图都有约束它们底部的约束,以及常数= 0的超前视图。 该UIView也有其顶部固定到其超视图,我有一个IBOutlet连接到约束,以便以编程方式进行调整。 UIImageView有第四个约束将其高度固定到设备的高度(在我的情况下是568)。 这是我期待/在iOS 7中实现的行为:我试图缩小容器视图的高度,并导致图像视图的顶部被切断而不改变宽高比(看起来像你裁剪closures图像的顶部)…这就是为什么我固定了图像视图的高度和底部边缘。 实际上在iOS8中发生了什么:容器视图按预期收缩(它保持固定在边和底部,高度缩小)。 UIImageView行为就好像它具有顶点空间约束,而且符号== 0。而不是切断图像的顶部,整个图像缩小。 由于我在AspectFit模式下显示图像,所以双面也会捏合以保持纵横比相同(但是imageView本身仍然固定在前导,尾部和底部边缘上)。 我该怎么做:我有一个通知,从我的代码的另一部分触发调整连接到IBOutlet的顶部空间约束。 它所调用的方法真的很简单: – (void) setTopSpaceForContainerView:(NSNotification*) notif{ containerView_TopSpace.constant = [[notif.userInfo objectForKey:kTopSpace] intValue]; [self.view setNeedsUpdateConstraints]; [self.view setNeedsLayout]; } 其他人有类似的经历? 我试图find一个解决方法,但iOS 8似乎决心缩小我的形象。 万分感谢!

AutoLayout多行UILabel剪掉一些文字

我试图学习汽车的布局,最终以为我发现这件事情时就挂上了。 我在玩原型单元和标签。 我正在尝试一个 标题, titleLbl – 图片中的蓝色框 钱, moneyLbl – 图片中的绿色框 Subtitle / Description, subTitleLbl – 图片中的红色框 到目前为止,我有这样的: 我想要达到的是: 绿框应该始终显示在1行上 绿框内的值应该以蓝框为中心 蓝色框将会占用剩余的空间(在2之间为水平约束-8px),并且如果需要的话在多行上显示 红色框应该在下面,根据需要显示多行。 正如你所看到的,除了最后一行的例子之外,这几乎都是有效的。 我试图研究这个问题,从我能收集的内容来看,这与内在内容大小有关。 许多post在线推荐设置setPreferredMaxLayoutWidth ,我已经在多个地方为titleLbl做了这个,并没有任何效果。 只有将其硬编码为180时,才能得到结果,但是它还在文本上方/下方的其他蓝色框中添加了空白/填充,大大增加了红色/蓝色框之间的空间。 这是我的约束: 标题: 钱: 字幕: 基于我用其他文本样本运行的testing,它似乎使用了故事板中显示的宽度,但是任何尝试更正它都不起作用。 我已经创build了一个单元格的伊娃,并用它来创build单元格的高度: – (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { [sizingCellTitleSubMoney.titleLbl setText:[[tableViewData objectAtIndex:indexPath.row] objectForKey:@"title"]]; [sizingCellTitleSubMoney.subtitleLbl setText:[[tableViewData objectAtIndex:indexPath.row] objectForKey:@"subtitle"]]; [sizingCellTitleSubMoney.moneyLbl setText:[[tableViewData objectAtIndex:indexPath.row] objectForKey:@"cost"]]; [sizingCellTitleSubMoney layoutIfNeeded]; CGSize […]

自动布局自动旋转时,如何重新排列视图?

我经常遇到这样的问题,我希望以一种方式来安排我的意见,而对于风景来说却有一种截然不同的方式。 对于一个简单的例子,请考虑以下几点: 肖像: 景观: 请注意,纵向上的图像是垂直堆叠的,但在横向上,它们是并排的? 当然,我可以手动计算位置和大小,但是对于更复杂的视图,这很快变得复杂。 另外,我更喜欢使用Autolayout,所以有更less的设备特定的代码(如果有的话)。 但是,这似乎是很多 Autolayout代码来编写的。 有没有办法通过故事板设置这种东西的约束?

一些滚动后,UITableViewdynamic单元格高度才会正确

我有一个UITableView自定义UITableViewCell使用自动布局在故事板中定义。 单元格有几个多行UILabels 。 UITableView似乎正确地计算单元格高度,但对于前几个单元格高度没有正确划分标签之间。 滚动一下后,一切都按预期工作(即使是最初不正确的单元格)。 – (void)viewDidLoad { [super viewDidLoad] // … self.tableView.rowHeight = UITableViewAutomaticDimension; } – (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { TableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"TestCell"]; // … // Set label.text for variable length string. return cell; } 有什么我可能会失踪,这是导致汽车布局不能够在前几次工作? 我已经创build了一个演示这种行为的示例项目 。

是否有可能与UITableView的tableHeaderView使用AutoLayout?

由于我发现AutoLayout我到处使用它,现在我试图用tableHeaderView来使用它。 我做了UIView一个subclass添加了一切(标签等),我想与他们的约束,然后我把这个CustomView到UITableView的tableHeaderView 。 一切工作得很好,除了UITableView总是显示在CustomView , 上面的意思是CustomView 在 UITableView 之下 ,所以不能被看到! 看来,无论我做什么, UITableView的tableHeaderView的height 总是 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 […]

移动视图与约束

我在视图控制器中有几个视图,当检测到向上滑动时向上移动,然后在检测到向下滑动时向下移动。 我通过使用CGRectOffset调整y原点来迫使视图移动。 现在,我已经对IB的视图应用了约束,我不确定最佳的方式来移动视图,以便他们在iPhone 5,6和6 +的最终位置。 目前我正在做这样的事情: [self.view layoutIfNeeded]; self.panFrameVerticalConstraint.constant = self.panFrameVerticalConstraint.constant +338; [UIView animateWithDuration:5 animations:^{ [self.view layoutIfNeeded]; }]; 用比例来改变常量是否更好? 所以对于上面的约束,而不是使用338,最好是这样做: self.panFrameVerticalConstraint.constant = self.panFrameVerticalConstraint.constant + (self.panView.frame.size.height/1.680); //self.panView.frame.size.height = 568 //(568/1.680) = 338

在tableHeaderView中使用自动布局

我有一个包含多行UILabel的UIView子类。 该视图使用自动布局。 我想将此视图设置为UITableView ( 而不是节标题)的tableHeaderView 。 该标题的高度将取决于标签的文字,而标签的文字又取决于设备的宽度。 这种场景自动布局应该是伟大的。 我发现并尝试了很多 很多的 解决scheme来获得这个工作,但无济于事。 我尝试过的一些事情: layoutSubviews期间在每个标签上设置preferredMaxLayoutWidth 定义一个intrinsicContentSize 试图找出所需的视图大小,并手动设置tableHeaderView的框架。 在设置标题时为视图添加宽度约束 一堆其他的东西 我遇到的一些各种失败: 标签延伸超出视图的宽度,不包裹 帧的高度是0 应用程序崩溃, Auto Layout still required after executing -layoutSubviews 解决scheme(或者解决scheme,如果需要的话)应该适用于iOS 7和iOS 8.请注意,所有这些都是以编程方式完成的。 我已经build立了一个小样本项目 ,以防你想破解这个问题。 我已将我的努力重新设置到以下的起点: SCAMessageView *header = [[SCAMessageView alloc] init]; header.titleLabel.text = @"Warning"; header.subtitleLabel.text = @"This is a message with enough text to span multiple […]

不同设备的iOS大小不同的字体大小

在iOS 8中,我们可以为每个尺寸类别devise不同的UI布局。 我面临的问题是,我已经devise了紧凑宽度和规则高度(纵向所有iPhone的尺寸等级)的布局,但我想保留3.5和4英寸设备(iPhone 4和5)的标签更小的字体大小),4.7英寸(iPhone 6)相对较大,5.5英寸(iPhone 6 Plus)设备更大。 我已经search,但无法find一个解决scheme,以设置相同的大小类不同的设备不同的字体大小。