iOS 可滚动屏幕或使用 Autolayout 固定页脚

Posted

技术标签:

【中文标题】iOS 可滚动屏幕或使用 Autolayout 固定页脚【英文标题】:iOS Scrollable screen OR with a pinned footer using Autolayout 【发布时间】:2015-08-11 11:01:54 【问题描述】:

这与UIScrollView AutoLayout With 'Footer' Pinned to Bottom of Screen不同

我想要一个屏幕,其内容的高度可变加上页脚。当内容较少时,页脚应贴在底部,并与内容之间留有间隙。当内容超过屏幕大小时,屏幕应该是可滚动的,并且页脚应该出现在内容之后。

Few contents:                  Lots of contents:

+---------+                     +---------+
| Content |                     | Content |
| Content |                     | Content |
| Content |                     | Content |
|         |                     | Content |
|         |                     | Content |
| Footer  |                     | Content |
+---------+  < Screen bottom >  +---------+
                                | Content |
                                | Footer  |

我需要它与 ios7 兼容。

我对实现(滚动视图、表格视图等)没有具体要求,但我想通过自动布局(或任何更早的自动执行此操作的方式)来完成。

我不介意有一些代码来响应这两种不同的情况,只要它支持动态内容高度。我并不热衷于监控 UI 大小的变化,但是,如果可以以一种相当干净的方式完成,那就这样吧。

【问题讨论】:

在 tableView 中你可以很容易地做到这一点,只需将工具栏设置为 tableView 的页脚就可以了:) @Misha 你能扩展一下吗?我的问题不在于页脚出现在内容之后,而是在内容很少时将其固定在屏幕底部,而不是在内容不多时将其固定在屏幕底部。我尝试使用 UIToolbar 作为表格的页脚,但它出现在内容之后,而不是固定在底部。 还是不行吗? 【参考方案1】:

对不起,我之前误解了你的问题。但我认为这应该有效。在 ypur tableView 中添加 UIToolbar

-(void)viewDidLayoutSubviews [_tableView reloadData];

CGRect newFrame = _toolBar.frame;
newFrame.origin.y = _tableView.contentSize.height > CGRectGetHeight(_tableView.frame) ? _tableView.contentSize.height : CGRectGetHeight(_tableView.frame);
_toolBar.frame = newFrame;

我认为代码是可以自我解释的。 :)

【讨论】:

谢谢,我会接受答案,但这不是我的想法。我的意图是让它自动更新,通过自动布局或其他方式。但实际上,我将尝试使用类似于上述算术的方式收缩和扩展的约束;我只是不确定何时最好更新其价值。我还需要检查 contentSize 是否可靠。 当你重新加载你的表格视图时,它的 contenetSize 会相应地改变,所以你可以更新工具栏的高度

以上是关于iOS 可滚动屏幕或使用 Autolayout 固定页脚的主要内容,如果未能解决你的问题,请参考以下文章

IOS / Autolayout:如何修复大文本视图的宽度?

Xamarin iOS Autolayout:自动调整各种设备的宽度和垂直滚动,同时保持水平滚动禁用演示链接

IOS/Autolayout:如何修复大文本视图的宽度?

iOS 嵌套 UIScrollViews 使用 AutoLayout

是否可以使滚动视图不覆盖整个屏幕?

为 Autolayout 设置 UIScrollView 以便滚动 _only_ 用于小屏幕