【问题标题】:How to reproduce this "offset behavior" programmatically?如何以编程方式重现这种“偏移行为”?
【发布时间】:2015-05-30 18:17:15
【问题描述】:
从 iOS 7 开始,Apple 鼓励开发人员在导航栏和其他半透明元素后面显示内容。
假设我在导航视图中嵌入了一个视图控制器,向这个视图控制器添加了一个地图视图并将地图视图的边缘扩展到屏幕的边界(所以即使是在导航栏后面 ) 给出了预期的效果:导航栏模糊了地图视图的内容。
但是 iOS 还做了其他事情:虽然地图本身是在导航栏后面呈现的,但如果用户必须看到或触摸的 ui 元素(例如指南针)实际上是偏移的,因此它不会被导航栏隐藏;一图抵千言:
我想知道的是我应该使用地图视图的什么属性使其以编程方式表现得像这样? (因为如果我在地图顶部手动添加半透明视图,指南针将被隐藏,所以我希望能够这样做)?这个问题也适用于其他种类的视图,比如表格视图,原理一样吗?
谢谢。
【问题讨论】:
标签:
ios
uikit
interface-builder
【解决方案1】:
对于UIScrollView 及其子类(UICollectionView、UITableView),可以将contentInset 设置为UIEdgeInsetsMake(64.0 /* TOP */, 0.0 /* LEFT */, 44.0 /* BOTTOM */, 0.0 /* RIGHT */); 之类的东西。
您可以检查UIViewController 的属性topLayoutGuide 和bottomLayoutGuide 以确定您需要插入多少。
对于MKMapView,我尝试以编程方式添加它,它似乎会自动调整指南针的框架和“法律”标签。我会说布局按钮和标签需要考虑topLayoutGuide 和bottomLayoutGuide。