在我的最新发现之后,我完全修改了这个问题.
我的目标是实现以下效果:
请注意,我知道,这可以通过插入/删除所选单元格下方的单元格来实现,我已经使用该方法成功实现了.
这次,我想尝试使用Auto Layout约束来实现这一点.
我有一个示例项目可供任何人查看,也打开了一个问题.总结一下,这是我到目前为止所尝试的内容:
我在这里作为演员有以下观点:
我已经按照以下方式在我的单元格中设置了自动布局约束(请注意,这是严格的伪语言):
我有一个自定义UITableViewCell子类,有多个出口,但最重要的是前面提到的高度约束的出口:这里的想法是constant默认将其设置为0,但是当选择单元格时,将其设置为44,所以它变得可见:
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
detailViewHeightConstraint.constant = selected ? detailViewDefaultHeight : 0
UIView.animateWithDuration(0.3) {
self.layoutIfNeeded()
}
}
Run Code Online (Sandbox Code Playgroud)
我有以下结果:

所以效果是有效的,但不完全是我最初的想象.我没有推动主视图,而是希望细胞的高度在显示细节视图时增长,并在隐藏时收缩. …
iOS 9.0附带UIStackView,可以根据内容大小更轻松地布局视图.例如,要根据内容宽度连续放置3个按钮,您只需将它们嵌入堆栈视图中,设置轴水平和分布 - 按比例填充.
问题是如何在不支持堆栈视图的旧iOS版本中实现相同的结果.
我提出的一个解决方案是粗糙并且看起来不太好.再次,您将3个按钮连续放置并使用约束将它们固定到最近的邻居.在这之后你显然会看到内容优先模糊错误,因为自动布局系统不知道哪个按钮需要在其他按钮之前增长/缩小.
不幸的是,在应用程序启动之前标题是未知的,所以你可能会随意选择一个按钮.让我们说,我已经减少了从标准250到249的中间按钮优先级的水平内容.现在它将在其他两个之前增长.另一个问题是,左侧和右侧按钮严格缩小到其内容宽度,而没有像Stack View版本那样漂亮的填充.
我想使头部imageView的中心与蓝色标题的底部imageView的保持对齐.
如何使用Autolayout来实现?
屏幕4.0英寸
屏幕4.7英寸

我在故事板中使用过autolayout约束.但是在某些情况下,我想计算子视图的动态高度.我在viewDidAppear()中编码,它工作正常,因为在布局约束设置所有视图框架之后调用此方法.这里的问题是我可以通过约束看到框架设置半秒钟.然后代码重新构建视图.
我开始了解viewDidLayout(),它在约束设置框架后调用,以便我可以更改.但它不起作用.就像在使用约束之前调用此方法一样.
我一直在寻找自动布局和自动调整大小之间的正确区别,但无法找到确切的答案.我可以在哪里使用"自动布局"和应用程序中的"自动调整大小"?任何帮助都将成为感谢的一部分.
我有一个尺寸类宽度任意的高度,任何当前适用于iPad景观的高度.我有一个任务是为iPhone肖像设计相同的布局.
当我开始设计紧凑宽度的尺寸类,常规高度我的基本布局(任何,任何)也会改变.
我正在使用故事板进行设计.
注意:请注意 - 上传预览显示正确,但在模拟器上运行时会更改.
我建了一个自定义视图控制器.它有1个tableview,2个视图和1个地图.当我为这个布局设置约束时,它工作正常.我关闭项目并从视图控制器中重新打开地图视图.宽度和高度为1000点.如果我将地图设置在此堆栈的顶部,则没有问题.但是当我在其他视图的中间设置地图时,就会出现问题.我必须把这个mapview放在另一个视图中,否则会影响其他视图,但问题仍然存在.
我使用Xcode 8 beta 5,约束是0 0 0 0
UPDATE
我知道造成这种奇怪的布局错误的原因.它是附件(UITableViewCellAccessory)的设置.如果我停止指定附件,布局不会中断.我没有添加这个作为答案,因为答案需要一个解决方案,给我一个配件,而不打破布局
我看到人们使用动态高度自定义单元格的大部分问题是它们在旋转之前没有正确的高度.但是我看到相反的情况:所有单元格的高度都适用于其动态内容.向上和向下滚动不会破坏这一点.但是,如果我滚动到列表的底部,然后旋转设备,然后向后旋转一行将成为屏幕高度的0.5到1.5倍.
进一步旋转或进一步滚动将使行返回到期望高度.我在屏幕截图之前和之后都包含了几个
UITableView的定义如下
this.rootChildrenTable = new UITableView()
{
TranslatesAutoresizingMaskIntoConstraints = false,
AccessibilityIdentifier = "rootChildrenTable",
RowHeight = UITableView.AutomaticDimension,
EstimatedRowHeight = 44.0f,
BackgroundColor = UIColor.GroupTableViewBackgroundColor,
TableFooterView = new UIView(),
TableHeaderView = this.searchBar,
KeyboardDismissMode = UIScrollViewKeyboardDismissMode.OnDrag
};
Run Code Online (Sandbox Code Playgroud)
注意通常的嫌疑人是设置RowHeight和EstimatedRowHeight.一旦我Lines = 0从标签中删除,使行的高度相同,问题就会消失.
知道还有什么我应该看的吗?
当 iOS 9+ 中的 Auto Layout Trait Collection 更改时,是否有某种系统范围的通知?
我知道该UIViewController方法,traitCollectionDidChange但我想处理没有此方法的 App Delegate 中的特征更改。
目标是在发生更改时立即通知所有(相关)ViewController。traitCollectionDidChange仅在最顶层的 VC 以及当 VC 再次变为可见/活动时调用。
ios ×10
ios-autolayout ×10
xcode ×3
autolayout ×2
objective-c ×2
autoresize ×1
font-size ×1
ios9.3 ×1
size-classes ×1
uitableview ×1
xamarin.ios ×1
xcode7.3 ×1
xcode8 ×1