标签: autolayout

使用滚动视图内的动态大小的控制器调整容器视图的大小

我正在尝试使用UIScrollView内部具有动态高度的控制器创建容器视图,并使用自动布局自动调整大小.

说明设置的故事板

视图控制器A是滚动视图,其中包含容器视图,以及下面的更多内容.

View Controller B是视图控制器,我希望它具有动态大小,并且所有内容都在View Controller A的Scroll View中以全高显示.

我有一些问题,让B的动态大小自动设置A中容器视图的大小.但是,如果我在A中的容器视图上设置高度约束 A中的容器视图例如250,

如果View Controller B也有250个高度,那么它将是预期的输出.它也适用于高度1000,所以据我所知,所有自动布局约束都正确设置.不幸的是,由于高度实际上应该是动态的,我想避免设置高度约束.

我不确定是否有任何设置视图控制器BI可以设置它根据其内容自动更新其大小,或者是否有任何其他技巧我错过了.任何帮助将非常感激!

根据视图控制器B的大小没有设置高度约束,有没有办法在A中调整容器视图的大小?

uiscrollview ios autolayout uicontainerview

64
推荐指数
3
解决办法
3万
查看次数

我可以在同一视图上使用setFrame和autolayout吗?

我想为我的所有按钮添加填充,因此我将UIButton子类化,除了其他更改之外,我还想使用setFrame方法添加固定填充.除了setFrame之外,一切正常.我查了一下,我发现如果我在该视图上取消选中"使用AutoLayout",那么我可以使用setFrame,它可以工作.有没有解决的办法?我真的想使用自动布局,因为它有助于使应用程序在iphone 5和早期设备上都看起来不错.但我也想在我的子类中使用setFrame,以使我的生活更轻松.

总结一下,我的问题是:我可以使用autolayout并以编程方式调整UIView的框架吗?

iphone cocoa-touch interface-builder frame autolayout

63
推荐指数
2
解决办法
5万
查看次数

自动布局以动态调整uilabel宽度

所以我在Storyboard中并排了两个UILabels.第二个标签应该与第一个标签的右边缘对齐(尾随约束为1),但是我还需要第一个标签(左边的标签)来设置它的宽度等于它的内容大小,除非它达到最大宽度.视觉:


|标记一个文本| |标签两个文字|


我需要以下约束:

1)标签1应该宽度调整宽度,除非它达到最大尺寸.

2)标签2应始终与标签1的右边缘对接

如何在Storyboard中进行设置?

constraints storyboard ios autolayout

63
推荐指数
2
解决办法
6万
查看次数

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

有没有办法(暂时)禁用自动布局错误/警告消息:

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 seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSLayoutConstraint:0x170098420 H:[UIView:0x15c62c100(2)]>",
    "<NSLayoutConstraint:0x170098600 UIView:0x15c6294f0.leading == UIView:0x15c628d40.leadingMargin - 8>",
    "<NSLayoutConstraint:0x170098650 …
Run Code Online (Sandbox Code Playgroud)

xcode ios autolayout

63
推荐指数
4
解决办法
2万
查看次数

导航控制器顶部布局指南不符合自定义过渡

精简版:

当与自定义转换和UINavigationControlleriOS7 结合使用时,我遇到了自动布局顶部布局指南的问题.具体而言,顶级布局指南和文本视图之间的约束不受尊重.有没有人遇到过这个问题?


长版:

我有一个场景明确定义了约束(即顶部,底部,左侧和右侧),呈现如下视图:

对

但是当我在导航控制器上使用自定义转换时,顶部布局指南的顶部约束似乎关闭,它呈现如下,好像顶部布局指南位于屏幕顶部,而不是底部导航控制器:

错误

使用自定义转换时,导航控制器的"顶部布局指南"似乎变得混乱.其余约束正确应用.如果我旋转设备并再次旋转它,一切都会突然正确呈现,所以看起来并不是没有正确定义约束.同样,当我关闭自定义转换时,视图会正确呈现.

话虽如此,当我运行时_autolayoutTrace报告UILayoutGuide对象受到影响AMBIGUOUS LAYOUT:

(lldb) po [[UIWindow keyWindow] _autolayoutTrace]
Run Code Online (Sandbox Code Playgroud)

但是每当我看到它们时,这些布局指南总是被报告为含糊不清,即使我已经确保没有遗漏约束(我已经习惯性地选择视图控制器并选择"为视图控制器添加缺少的约束"或选择全部控制和为他们做同样的事情).

在如何我正是这样做的过渡方面,我指定符合对象UIViewControllerAnimatedTransitioninganimationControllerForOperation方法:

- (id<UIViewControllerAnimatedTransitioning>)navigationController:(UINavigationController *)navigationController
                                  animationControllerForOperation:(UINavigationControllerOperation)operation
                                               fromViewController:(UIViewController*)fromVC
                                                 toViewController:(UIViewController*)toVC
{
    if (operation == UINavigationControllerOperationPush)
        return [[PushAnimator alloc] init];

    return nil;
}
Run Code Online (Sandbox Code Playgroud)

@implementation PushAnimator

- (NSTimeInterval)transitionDuration:(id <UIViewControllerContextTransitioning>)transitionContext
{
    return 0.5;
}

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    UIViewController* toViewController   = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

    [[transitionContext containerView] addSubview:toViewController.view];
    CGFloat width = fromViewController.view.frame.size.width;

    toViewController.view.transform = CGAffineTransformMakeTranslation(width, 0); …
Run Code Online (Sandbox Code Playgroud)

uinavigationcontroller autolayout ios7 custom-transition

62
推荐指数
4
解决办法
2万
查看次数

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

UIView的内容抗压性和内容拥抱是什么?这些与视图的内在内容大小有何关系?

cocoa-touch uiview ios autolayout

62
推荐指数
1
解决办法
4万
查看次数

垂直对齐UILabel中的文本(注意:使用AutoLayout)

我正在复制问题之前的相同问题.我曾试图给出的解决方案,并没有能够解决它,因为sizetofit当我使用自动布局是无效的.

第一个截图

预期的显示如下.

第二个截图

cocoa-touch objective-c uilabel ios autolayout

62
推荐指数
5
解决办法
7万
查看次数

每次Xcode重新启动时错误放置视图

我在我的应用程序中第一次使用故事板

当我关闭Xcode时,我有关于错误放置的视图或与我的故事板有关的任何内容的0警告.当我重新启动Xcode并打开故事板时,我的15个场景中有3个放错了视图警告.

没有触及任何东西(除了选择文件),我可以发出一个git status并看到.storyboard文件有变化.如果我git diff,我看到这包含在文件的多个区域:

<variation key="widthClass=compact" misplaced="YES">
    <rect key="frame" x="8" y="56" width="130" height="34"/>
</variation>
Run Code Online (Sandbox Code Playgroud)

如果元素已经有<variation key="widthClass=Compact"节点,则添加misplaced属性和rect节点.

要使警告消失,我唯一需要做的就是点击每个警告,确保选中"更新框架",然后单击"修复错位".这修复了一切,直到我重新启动Xcode.

我场景的基本结构是:

UIView
    UICollectionView
        UICollectionReusableView
        UICollectionViewCell
        UICollectionViewCell
    UISegmentedControl
Run Code Online (Sandbox Code Playgroud)

每次重新启动时如何防止这种情况发生?

xcode objective-c interface-builder ios autolayout

62
推荐指数
1
解决办法
6441
查看次数

在iPhone和iPad上具有自动布局左边距的UITableViewCell不同

我正在使用UITableView与静态单元格分组的选项屏幕/场景.一切都在使用Autolayout在Xcode 6.1/iOS 8.1.x/Storyboard中完成.在表组中有混合类型的单元格,有两种类型会导致我出现问题:

  1. 具有自定义样式的单元格
  2. 样式为"右侧细节"的单元格

在单元格#1上,我可以为标签和前导容器之间的左边距设置约束.在单元#2上,据我所知,我无法在Interface Builder中设置任何约束.我在单元格#1中的标签上设置了左边距,因此它与单元格#2中的标签对齐.iPhone上的一切看起来都不错,但是如果我在iPad上显示相同的表格,其中表格视图的容器大小是屏幕大小的一半,则单元格#2获得更多边距(动态?),而单元格#1保持绝对边距I在约束中设置.我还尝试使用属性"相对于边距"更改单元格#1中的左边距,但无效.

苹果手机:

iPhone上的表格

iPad(桌面宽度= 1/2屏幕尺寸)

iPad上的表格

所以问题是:如何在单元格#1中设置标签的约束,使其与单元格#2对齐.

这里还有一个Xcode 6.1示例项目的链接,用于演示该问题.在iPhone和iPad上运行以查看差异:

https://dl.dropboxusercontent.com/u/5252156/Code/tableViewTest.zip

这个问题可能与iPhone和iPad的布局静态表格单元格有关,但iOS 8也可能有所不同,因为现在一切都应该是自适应的.这就是我决定发布这个问题的原因.

margin uitableview ios autolayout

61
推荐指数
3
解决办法
3万
查看次数

自定义UITableViewCell中的多个UILabel

在我正在创建的iOS 8应用程序中,我有一个tableview,我需要它们自我调整大小.我使用自动布局实现它,它的工作原理.几乎.这是它现在的样子.

在此输入图像描述

单元格内有3个标签.主要标签有lorem ipsum文本.带有数字串的字幕(这是两个单独的标签.可能会因为颜色相同而混淆.)然后第三个标签带有小黑色文字.

第一个标签正确调整大小没有问题,第二个标签相应地上下移动.但问题在于第三个小标签.正如您所看到的,它没有调整自身大小以适应所有文本.

现在发生了一件奇怪的事情.我把它转向风景,这就是它.

在此输入图像描述

由于存在空间,标签正在显示其应有的整个文本.精细.然后我把它变回肖像.

在此输入图像描述

现在,小标签已经调整大小以适应其所有文本,但它溢出了单元格边界.我试着把细胞做大,但是没用.由于这是自我调整细胞,我不认为这是正确的方法.

我没有收到任何错误,甚至没有警告我的汽车布局限制.

在此输入图像描述

我在方法中设置了这两行代码viewDidLoad().

tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableViewAutomaticDimension
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这里可能做错了什么?

由于仅仅通过查看图像很难回答,而且我没有更多的代码可以在上面的代码段旁边发布,我上传了一个可运行的Xcode项目,在这里展示了这个问题.(有2个自定义单元格.基本上它是同一个单元格,只是高度在第二个单元格中增加.)

我一直在摆弄汽车布局限制,但我似乎无法让这个工作.任何帮助,将不胜感激.

谢谢.


更新:

在本教程的帮助下,我发现了一些有用的指针.根据它,每个子视图应该具有固定其所有边的约束,并且应该存在从上到下的约束,这有助于自动布局以计算单元的高度.在我的原始帖子中,我在每个标签之间有垂直空间,所以我认为这是自动布局无法计算正确高度的原因.

所以我做了一些改变.

  • 我将标签之间的垂直空间缩小为0,并在顶部和中间标签以及中间和底部标签之间设置垂直空间限制.
  • 我将top,top,trailing约束添加到顶部标签.
  • 领先并落后于中间标签.
  • 领先,底部,尾随标签.

现在这是另一个奇怪的部分.当我第一次运行它时,底部标签裁剪问题仍然存在.

在此输入图像描述

但是,如果我将设备旋转到横向并将其转回肖像,则所有单元格都会正确调整大小以适合两个标签!

在此输入图像描述

仍然无法弄清楚为什么一开始不会发生这种情况.更新的Xcode项目在这里.

uitableview ios autolayout swift ios8

60
推荐指数
3
解决办法
4万
查看次数