标签: ios-autolayout

使用自动布局约束动态调整表视图单元格的大小

更新

在我的最新发现之后,我完全修改了这个问题.

目标

我的目标是实现以下效果:

  1. 有一个简单的表格视图
  2. 用户选择一行
  3. 选定的行会展开,显示原始行下方的另一个标签

请注意,我知道,这可以通过插入/删除所选单元格下方的单元格来实现,我已经使用该方法成功实现了.

这次,我想尝试使用Auto Layout约束来实现这一点.

当前状态

我有一个示例项目可供任何人查看,也打开了一个问题.总结一下,这是我到目前为止所尝试的内容:

我在这里作为演员有以下观点:

  • 单元格的内容视图
  • 顶视图,包含主标签("主视图")
  • 主视图下方的底视图,包含最初隐藏的标签("详细视图")

我已经按照以下方式在我的单元格中设置了自动布局约束(请注意,这是严格的伪语言):

  • mainView.top = contentView.top
  • mainView.leading = contentView.leading
  • mainView.trailing = contentView.trailing
  • mainView.bottom = detailView.top
  • detailView.leading = contentView.leading
  • detailView.trailing = contentView.trailing
  • detailView.bottom = contentView.bottom
  • detailView.height = 0

我有一个自定义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)

我有以下结果:

当前状态

所以效果是有效的,但不完全是我最初的想象.我没有推动主视图,而是希望细胞的高度在显示细节视图时增长,并在隐藏时收缩. …

uitableview ios autolayout ios-autolayout

14
推荐指数
1
解决办法
4987
查看次数

在9.0之前的iOS版本上模仿UIStackView`填充比例'布局方法

iOS 9.0附带UIStackView,可以根据内容大小更轻松地布局视图.例如,要根据内容宽度连续放置3个按钮,您只需将它们嵌入堆栈视图中,设置轴水平和分布 - 按比例填充.

Stack View解决方案

问题是如何在不支持堆栈视图的旧iOS版本中实现相同的结果.

我提出的一个解决方案是粗糙并且看起来不太好.再次,您将3个按钮连续放置并使用约束将它们固定到最近的邻居.在这之后你显然会看到内容优先模糊错误,因为自动布局系统不知道哪个按钮需要在其他按钮之前增长/缩小.

内容优先模糊

不幸的是,在应用程序启动之前标题是未知的,所以你可能会随意选择一个按钮.让我们说,我已经减少了从标准250到249的中间按钮优先级的水平内容.现在它将在其他两个之前增长.另一个问题是,左侧和右侧按钮严格缩小到其内容宽度,而没有像Stack View版本那样漂亮的填充.

布局比较

ios ios-autolayout

13
推荐指数
2
解决办法
3538
查看次数

iOS:如何使用AutoLayout将视图的中心与另一个视图的底部对齐

我想使头部imageView的中心与蓝色标题的底部imageView的保持对齐.

如何使用Autolayout来实现?

屏幕4.0英寸 [屏幕4.7英寸] 屏幕4.7英寸 屏幕4.0英寸[屏幕4.7英寸

ios ios-autolayout

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

当autolayout约束在视图控制器生命周期中设置帧时?

我在故事板中使用过autolayout约束.但是在某些情况下,我想计算子视图的动态高度.我在viewDidAppear()中编码,它工作正常,因为在布局约束设置所有视图框架之后调用此方法.这里的问题是我可以通过约束看到框架设置半秒钟.然后代码重新构建视图.

我开始了解viewDidLayout(),它在约束设置框架后调用,以便我可以更改.但它不起作用.就像在使用约束之前调用此方法一样.

xcode objective-c ios ios-autolayout

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

iOS中的自动布局和自动调整大小之间的基本区别是什么

我一直在寻找自动布局和自动调整大小之间的正确区别,但无法找到确切的答案.我可以在哪里使用"自动布局"和应用程序中的"自动调整大小"?任何帮助都将成为感谢的一部分.

user-interface xcode autoresize ios ios-autolayout

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

更改iphone的基本值布局会影响ipad布局

我有一个尺寸类宽度任意的高度,任何当前适用于iPad景观的高度.我有一个任务是为iPhone肖像设计相同的布局.

当我开始设计紧凑宽度的尺寸类,常规高度我的基本布局(任何,任何)也会改变.

我正在使用故事板进行设计.

注意:请注意 - 上传预览显示正确,但在模拟器上运行时会更改.

ios size-classes ios-autolayout xcode7.3 ios9.3

11
推荐指数
1
解决办法
136
查看次数

重新打开项目时MKMapkit约束错误

我建了一个自定义视图控制器.它有1个tableview,2个视图和1个地图.当我为这个布局设置约束时,它工作正常.我关闭项目并从视图控制器中重新打开地图视图.宽度和高度为1000点.如果我将地图设置在此堆栈的顶部,则没有问题.但是当我在其他视图的中间设置地图时,就会出现问题.我必须把这个mapview放在另一个视图中,否则会影响其他视图,但问题仍然存在.

我使用Xcode 8 beta 5,约束是0 0 0 0

在此输入图像描述

ios ios-autolayout

8
推荐指数
1
解决办法
147
查看次数

可变高度UITableViewCell在滚动到列表末尾并旋转后展开

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)

注意通常的嫌疑人是设置RowHeightEstimatedRowHeight.一旦我Lines = 0从标签中删除,使行的高度相同,问题就会消失.

知道还有什么我应该看的吗?

xamarin.ios ios autolayout ios-autolayout

8
推荐指数
1
解决办法
260
查看次数

根据每个iPhone大小更改字体大小

是否有任何方法根据不同的iPhone屏幕更改/自动调整字体大小,因为当我更改字体大小时,应用于其他手机大小的字体大小也太大了.

我目前的手机尺寸为iPhone 6s plus(5.5英寸) 在此输入图像描述

在此输入图像描述

xcode font-size ios ios-autolayout xcode8

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

自动布局特征集合更改时的通知(不是方法)?

当 iOS 9+ 中的 Auto Layout Trait Collection 更改时,是否有某种系统范围的通知?

我知道该UIViewController方法,traitCollectionDidChange但我想处理没有此方法的 App Delegate 中的特征更改。

目标是在发生更改时立即通知所有(相关)ViewController。traitCollectionDidChange仅在最顶层的 VC 以及当 VC 再次变为可见/活动时调用。

objective-c ios ios-autolayout

7
推荐指数
1
解决办法
1412
查看次数