使用侧边栏菜单时,UITableView 无意中向下移动了约 1 英寸
Posted
技术标签:
【中文标题】使用侧边栏菜单时,UITableView 无意中向下移动了约 1 英寸【英文标题】:UITableView is shifting down ~1inch unintentionally when using using sidebar menu 【发布时间】:2014-05-19 19:45:00 【问题描述】:我的应用程序中有一个奇怪的错误,它使用带有UITableView
的侧边栏菜单来列出导航按钮。当我启动我的应用程序时,everything looks fine and is in the correct place。
一旦我选择了相应的viewController, and navigate back to sidebar menu the
UITableView`is shifted down about 1 inch。
如果我按下侧边栏菜单按钮将其关闭,菜单会重置,一切正常且看起来正常。这个错误只发生一次,一旦我选择了一行,导航回它,关闭它,UITableView
将在正确的位置,直到用户硬重启应用程序。知道发生了什么吗?
这是我的侧边栏菜单代码:
#import "SideBarViewController.h"
@interface SideBarViewController ()
@end
@implementation SideBarViewController
@synthesize controllerArray, sidebarButton;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self)
// Custom initialization
return self;
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view.
controllerArray = [NSArray arrayWithObjects:@"Search For Games", @"Login", @"Library", nil];
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [controllerArray count];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *simpleTableIdentifier = @"SimpleTableItem";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil)
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
cell.textLabel.text = [controllerArray objectAtIndex:indexPath.row];
return cell;
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
UIViewController *selection;
if (indexPath.row == 0)
selection = [self.storyboard instantiateViewControllerWithIdentifier:@"SearchController"];
[self.navigationController pushViewController:selection animated:YES];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
else if (indexPath.row == 1)
selection = [self.storyboard instantiateViewControllerWithIdentifier:@"LoginController"];
[self.navigationController pushViewController:selection animated:YES];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
else if (indexPath.row == 2)
selection = [self.storyboard instantiateViewControllerWithIdentifier:@"LibraryController"];
[self.navigationController pushViewController:selection animated:YES];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
我按照“Ray Wenderlich”网站上的教程获取侧边栏代码。
此外,我还测试了其他对象,例如按钮和标签,它们不会移动,只有 UITableView
会移动。
谢谢!
【问题讨论】:
检查自动布局约束中的上边距是否设置为灵活。 @pawan 我回家后看看。谢谢! @pawan 我的边距没有设置为灵活。 【参考方案1】:我找到了解决方案!它与导航控制器的设置有关。信用到期。
Container View getting pushed down as if it had a UINavigationBar?
你需要检查一下导航栏设置下是否勾选了“半透明”。
【讨论】:
谢谢你……只是花了两个小时挠头……第一次完美……然后在带有展开segue的模态视图转换之后——它会添加一个明显的帧位移变化。谢谢。【参考方案2】:尝试将self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
添加到viewDidLoad
。如果您的应用自动添加插图,这可能是一个解决方案。
【讨论】:
我必须将此添加到viewWillAppear
而不是 viewDidLoad
。
这项工作,一旦你的细胞向下移动,你必须调用它。所以它会重新排列。【参考方案3】:
-
尝试在您的视图控制器中设置
self.automaticallyAdjustsScrollViewInsets = NO
。
尝试将edgesForExtendedLayout
设置为UIRectEdgeNone
。
希望对你有帮助。
【讨论】:
这对我不起作用。还在下移。我想知道它是否与从 UINavigation 推送有关?它似乎正在向下移动 UINav 标题栏的宽度...以上是关于使用侧边栏菜单时,UITableView 无意中向下移动了约 1 英寸的主要内容,如果未能解决你的问题,请参考以下文章