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:自动调整各种设备的宽度和垂直滚动,同时保持水平滚动禁用演示链接