どのアイテムが選択されたかを示す下線が欲しいです。アイテムがタップされるたびに、他のアイテムにスライドします。そのため、カスタムにサブビューを追加しUITabBarController
、アニメーションを設定しました。次にhidesBottomBarWhenPushed
、押されたときにタブバーを非表示にするために使用します。ただし、下線はカスタムと組み合わされていないようUITabBarController
です。
サブビューを処理して、バックジェスチャを使用しても常に上に表示されるようにするにはどうすればよいですか? このFlipboardアプリのキャプチャは、私がやりたいことです。
編集:
CustomTabBarController.m
- (void)viewDidLoad
{
[super viewDidLoad];
// create underline view
CGRect tabBarFrame = self.tabBar.frame;
CGFloat itemWidth = (CGFloat)CGRectGetWidth(tabBarFrame) / MIN(5, self.tabBar.items.count);
CGFloat originX = (CGFloat)itemWidth * self.selectedIndex;
CGRect underlineFrame = CGRectMake(originX, CGRectGetMaxY(tabBarFrame) - 3.0f, itemWidth, 3.0f);
self.underlineView = [[UIView alloc] initWithFrame:underlineFrame];
self.underlineView.backgroundColor = [UIColor redColor];
[self.view addSubview:self.underlineView];
}
#pragma mark - UITabBarDelegate
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
{
NSUInteger itemIndex = [tabBar.items indexOfObject:item];
CGRect underlineFrame = self.underlineView.frame;
CGFloat originX = (CGFloat)CGRectGetWidth(self.underlineView.frame) * itemIndex;
// underline shifting animation
[UIView animateWithDuration:0.25
animations:^{
self.underlineView.frame = CGRectMake(originX, underlineFrame.origin.y, CGRectGetWidth(underlineFrame), CGRectGetHeight(underlineFrame));
}];
}
CustomTableViewController.m
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UIViewController *detailViewController = segue.destinationViewController;
detailViewController.hidesBottomBarWhenPushed = YES;
}
hidesBottomBarWhenPushed
タブ バーを非表示にしますが、そのサブビュー (下線ビュー) を非表示にします。自分で非表示にして で表示するとviewWillAppear
、下線ビューがタブ バーの上に表示されなくなります。