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

视图控制器A是滚动视图,其中包含容器视图,以及下面的更多内容.
View Controller B是视图控制器,我希望它具有动态大小,并且所有内容都在View Controller A的Scroll View中以全高显示.
我有一些问题,让B的动态大小自动设置A中容器视图的大小.但是,如果我在A中的容器视图上设置高度约束
,
如果View Controller B也有250个高度,那么它将是预期的输出.它也适用于高度1000,所以据我所知,所有自动布局约束都正确设置.不幸的是,由于高度实际上应该是动态的,我想避免设置高度约束.
我不确定是否有任何设置视图控制器BI可以设置它根据其内容自动更新其大小,或者是否有任何其他技巧我错过了.任何帮助将非常感激!
根据视图控制器B的大小没有设置高度约束,有没有办法在A中调整容器视图的大小?
我想为我的所有按钮添加填充,因此我将UIButton子类化,除了其他更改之外,我还想使用setFrame方法添加固定填充.除了setFrame之外,一切正常.我查了一下,我发现如果我在该视图上取消选中"使用AutoLayout",那么我可以使用setFrame,它可以工作.有没有解决的办法?我真的想使用自动布局,因为它有助于使应用程序在iphone 5和早期设备上都看起来不错.但我也想在我的子类中使用setFrame,以使我的生活更轻松.
总结一下,我的问题是:我可以使用autolayout并以编程方式调整UIView的框架吗?
所以我在Storyboard中并排了两个UILabels.第二个标签应该与第一个标签的右边缘对齐(尾随约束为1),但是我还需要第一个标签(左边的标签)来设置它的宽度等于它的内容大小,除非它达到最大宽度.视觉:
|标记一个文本| |标签两个文字|
我需要以下约束:
1)标签1应该宽度调整宽度,除非它达到最大尺寸.
2)标签2应始终与标签1的右边缘对接
如何在Storyboard中进行设置?
有没有办法(暂时)禁用自动布局错误/警告消息:
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) 精简版:
当与自定义转换和UINavigationControlleriOS7 结合使用时,我遇到了自动布局顶部布局指南的问题.具体而言,顶级布局指南和文本视图之间的约束不受尊重.有没有人遇到过这个问题?
长版:
我有一个场景明确定义了约束(即顶部,底部,左侧和右侧),呈现如下视图:

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

使用自定义转换时,导航控制器的"顶部布局指南"似乎变得混乱.其余约束正确应用.如果我旋转设备并再次旋转它,一切都会突然正确呈现,所以看起来并不是没有正确定义约束.同样,当我关闭自定义转换时,视图会正确呈现.
话虽如此,当我运行时_autolayoutTrace报告UILayoutGuide对象受到影响AMBIGUOUS LAYOUT:
(lldb) po [[UIWindow keyWindow] _autolayoutTrace]
Run Code Online (Sandbox Code Playgroud)
但是每当我看到它们时,这些布局指南总是被报告为含糊不清,即使我已经确保没有遗漏约束(我已经习惯性地选择视图控制器并选择"为视图控制器添加缺少的约束"或选择全部控制和为他们做同样的事情).
在如何我正是这样做的过渡方面,我指定符合对象UIViewControllerAnimatedTransitioning的animationControllerForOperation方法:
- (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) UIView的内容抗压性和内容拥抱是什么?这些与视图的内在内容大小有何关系?
我在我的应用程序中第一次使用故事板
当我关闭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)
每次重新启动时如何防止这种情况发生?
我正在使用UITableView与静态单元格分组的选项屏幕/场景.一切都在使用Autolayout在Xcode 6.1/iOS 8.1.x/Storyboard中完成.在表组中有混合类型的单元格,有两种类型会导致我出现问题:
在单元格#1上,我可以为标签和前导容器之间的左边距设置约束.在单元#2上,据我所知,我无法在Interface Builder中设置任何约束.我在单元格#1中的标签上设置了左边距,因此它与单元格#2中的标签对齐.iPhone上的一切看起来都不错,但是如果我在iPad上显示相同的表格,其中表格视图的容器大小是屏幕大小的一半,则单元格#2获得更多边距(动态?),而单元格#1保持绝对边距I在约束中设置.我还尝试使用属性"相对于边距"更改单元格#1中的左边距,但无效.
苹果手机:

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

所以问题是:如何在单元格#1中设置标签的约束,使其与单元格#2对齐.
这里还有一个Xcode 6.1示例项目的链接,用于演示该问题.在iPhone和iPad上运行以查看差异:
https://dl.dropboxusercontent.com/u/5252156/Code/tableViewTest.zip
这个问题可能与iPhone和iPad的布局静态表格单元格有关,但iOS 8也可能有所不同,因为现在一切都应该是自适应的.这就是我决定发布这个问题的原因.
在我正在创建的iOS 8应用程序中,我有一个tableview,我需要它们自我调整大小.我使用自动布局实现它,它的工作原理.几乎.这是它现在的样子.

单元格内有3个标签.主要标签有lorem ipsum文本.带有数字串的字幕(这是两个单独的标签.可能会因为颜色相同而混淆.)然后第三个标签带有小黑色文字.
第一个标签正确调整大小没有问题,第二个标签相应地上下移动.但问题在于第三个小标签.正如您所看到的,它没有调整自身大小以适应所有文本.
现在发生了一件奇怪的事情.我把它转向风景,这就是它.

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

现在,小标签已经调整大小以适应其所有文本,但它溢出了单元格边界.我试着把细胞做大,但是没用.由于这是自我调整细胞,我不认为这是正确的方法.
我没有收到任何错误,甚至没有警告我的汽车布局限制.

我在方法中设置了这两行代码viewDidLoad().
tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableViewAutomaticDimension
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这里可能做错了什么?
由于仅仅通过查看图像很难回答,而且我没有更多的代码可以在上面的代码段旁边发布,我上传了一个可运行的Xcode项目,在这里展示了这个问题.(有2个自定义单元格.基本上它是同一个单元格,只是高度在第二个单元格中增加.)
我一直在摆弄汽车布局限制,但我似乎无法让这个工作.任何帮助,将不胜感激.
谢谢.
更新:
在本教程的帮助下,我发现了一些有用的指针.根据它,每个子视图应该具有固定其所有边的约束,并且应该存在从上到下的约束,这有助于自动布局以计算单元的高度.在我的原始帖子中,我在每个标签之间有垂直空间,所以我认为这是自动布局无法计算正确高度的原因.
所以我做了一些改变.
现在这是另一个奇怪的部分.当我第一次运行它时,底部标签裁剪问题仍然存在.

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

仍然无法弄清楚为什么一开始不会发生这种情况.更新的Xcode项目在这里.
autolayout ×10
ios ×8
cocoa-touch ×3
objective-c ×2
uitableview ×2
xcode ×2
constraints ×1
frame ×1
ios7 ×1
ios8 ×1
iphone ×1
margin ×1
storyboard ×1
swift ×1
uilabel ×1
uiscrollview ×1
uiview ×1