Ton*_*ung 38 iphone objective-c uitableview ios7
我正在将我的项目转移到iOS7.我正面临着与半透明导航栏相关的奇怪问题.
我有一个视图控制器,它有一个tableview作为子视图(让我们称之为ControllerA).我使用controllerA初始化一个新的uinavigationcontroller并使用presentviewcontroller以模态方式呈现它.导航栏会阻止显示的视图控制器的表视图.我将automaticAdjustsScrollViewInsets设置为YES,但结果没有改变.我知道我可以将edgesForExtendedLayout设置为UIRectEdgeNone,但它会使导航栏不再是半透明的.
之后,我尝试创建一个新的视图控制器进行测试.它包含几乎相同的元素.但结果却大相径庭.表视图内容不会被阻止.
结论
Ton*_*ung 55
我在苹果开发者论坛上找到了答案.有两种不同的情况.
第一个,添加的视图控制器是一个UITableViewController. 这个问题不应该出现,因为苹果会自动填充它.
第二个,视图控制器不是UITableViewController. 在视图层次结构中,它包含一个UITableView.在这种情况下,如果UITableview(或ScrollView)是viewController的主视图或主视图的第一个子视图,它将起作用.否则,视图控制器不知道要填充哪个滚动视图,它将发生问题.
在我的例子中,视图控制器是第二个.并且有一个背景图像视图作为主视图的第一个子视图.所以,它失败了.
这是Apple开发者论坛链接(需要开发者帐户才能访问):https: //devforums.apple.com/message/900138#900138
Chr*_*lay 47
如果您希望视图低于导航栏,但也希望它定位,以便默认情况下滚动视图内容的顶部位于导航栏下方,您可以在布局视图后手动添加顶部插入.这基本上是顶级视图是滚动视图时视图布局系统所执行的操作.
-(void)viewDidLayoutSubviews {
if ([self respondsToSelector:@selector(topLayoutGuide)]) {
UIEdgeInsets currentInsets = self.scrollView.contentInset;
self.scrollView.contentInset = (UIEdgeInsets){
.top = self.topLayoutGuide.length,
.bottom = currentInsets.bottom,
.left = currentInsets.left,
.right = currentInsets.right
};
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38591 次 |
最近记录: |