2016-12-08 8 views
1

を使用している場合、テーブルビューがスクロールするときにツールバーを折りたたむ機能を追加しています。しかし、ツールバーがy軸に沿って上に移動すると、次の結果が得られます(ツールバーのコンテンツはステータスバーの内容と混合しています)。iOSのステータスバーの下にツールバーを追加/表示する方法は?私のiOSアプリケーションで

enter image description here

@interface ListViewController() <UITableViewDataSource, UITableViewDelegate> 

@property (weak, nonatomic) IBOutlet UILabel *labelPageTitle; 
@property (weak, nonatomic) IBOutlet UITableView *listTableView; 
@property (nonatomic) CGFloat previousScrollViewYOffset; 
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *toolbarTop; 

@end 

@implementation ListViewController 

//- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
//{ 
// CGRect frame = self.toolbars.frame; 
// CGFloat size = frame.size.height - 21; 
// CGFloat framePercentageHidden = ((20 - frame.origin.y)/(frame.size.height - 1)); 
// CGFloat scrollOffset = scrollView.contentOffset.y; 
// CGFloat scrollDiff = scrollOffset - self.previousScrollViewYOffset; 
// CGFloat scrollHeight = scrollView.frame.size.height; 
//  
// NSLog(@"scrollView.frame - %@", NSStringFromCGRect(scrollView.frame)); 
// NSLog(@"scrollView.contentInset - %@", NSStringFromUIEdgeInsets(scrollView.contentInset)); 
//  
// CGFloat scrollContentSizeHeight = scrollView.contentSize.height + scrollView.contentInset.bottom; 
//  
// if (scrollOffset <= -scrollView.contentInset.top) { 
//  frame.origin.y = 20; 
// } else if ((scrollOffset + scrollHeight) >= scrollContentSizeHeight) { 
//  frame.origin.y = -size; 
// } else { 
//  frame.origin.y = MIN(20, MAX(-size, frame.origin.y - scrollDiff)); 
// } 
//  
// [self.toolbars setFrame:frame]; 
// [self updateBarButtonItems:(1 - framePercentageHidden)]; 
// self.previousScrollViewYOffset = scrollOffset; 
//} 
// 
//- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
//{ 
// [self stoppedScrolling]; 
//} 
// 
//- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView 
//     willDecelerate:(BOOL)decelerate 
//{ 
// if (!decelerate) { 
//  [self stoppedScrolling]; 
// } 
//} 
// 
//- (void)stoppedScrolling 
//{ 
// CGRect frame = self.navigationController.navigationBar.frame; 
// if (frame.origin.y < 20) { 
//  [self animateNavBarTo:-(frame.size.height - 21)]; 
// } 
//} 
// 
//- (void)updateBarButtonItems:(CGFloat)alpha 
//{ 
// self.buttonDismiss.customView.alpha = alpha; 
// self.labelPageTitle.alpha = alpha; 
// self.toolbars.tintColor = [self.toolbars.tintColor colorWithAlphaComponent:alpha]; 
//} 
// 
//- (void)animateNavBarTo:(CGFloat)y 
//{ 
// [UIView animateWithDuration:0.2 animations:^{ 
//  CGRect frame = self.toolbars.frame; 
//  CGFloat alpha = (frame.origin.y >= y ? 0 : 1); 
//  frame.origin.y = y; 
//  [self.toolbars setFrame:frame]; 
//  [self updateBarButtonItems:alpha]; 
// }]; 
//} 

#pragma mark - view controllers life cycle methods 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) 
     self.edgesForExtendedLayout = UIRectEdgeNone; 

    self.extendedLayoutIncludesOpaqueBars=NO; 
    self.automaticallyAdjustsScrollViewInsets=NO; 

    [self.view layoutIfNeeded]; 

    _toolbarTop.constant = -34; 
    [self.listTableView setDataSource:self]; 
    [self.listTableView setDelegate:self]; 

    [Utils updateLabelFontSize:self.labelPageTitle ForInitialHeight:22 andInitialSize:21]; 

    [self.labelPageTitle setText:@"My Category"/*self.productCategory*/]; 
} 
+0

され、残りはあなたのコードください –

+0

@Umair Afzalを表示 - 私は、コードを掲載しています。どうぞご覧ください – appleBoy21

+0

@Sanket、なぜUINavigationControllerを使用しないのですか? – 0yeoj

答えて

3

を下のスクリーンショットをチェックし、私は解決策に遭遇します。まず@Desdenovaの助けを借りて@Lion &に感謝します。

ここに私がヒントを見つけたリンクがあります。私は、ツールバーの色合いの同じ色のステータスバーのフレームで1つのUIViewを割り当てられたポストで提案どおり

iOS8: How do I make statusBar opaque after navigationBar is hidden using hidesBarsOnSwipe?

ここに私の更新されたコードが読み込まれました。同じ

- (void)viewDidLoad { 
    [super viewDidLoad]; 
// if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) 
//  self.edgesForExtendedLayout = UIRectEdgeNone; 
//  
// self.extendedLayoutIncludesOpaqueBars=NO; 
// self.automaticallyAdjustsScrollViewInsets=NO; 

    [self.view layoutIfNeeded]; 

    _toolbarTop.constant = -34; 
    [self.listTableView setDataSource:self]; 
    [self.listTableView setDelegate:self]; 

    //let topBar = UIView(frame: UIApplication.sharedApplication().statusBarFrame) 
    UIView *statusBarView = [[UIView alloc] initWithFrame:[[UIApplication sharedApplication] statusBarFrame]]; 
    statusBarView.backgroundColor = self.view.backgroundColor; 
    [self.view addSubview:statusBarView]; 

    [Utils updateLabelFontSize:self.labelPageTitle ForInitialHeight:22 andInitialSize:21]; 

    [self.labelPageTitle setText:@"My Category"/*self.productCategory*/]; 
} 

最終結果は

enter image description here

0

代わりsuperview's topでそれをピン、TopLayoutGuide.Bottomから制約を固定しないでください。 toolbar's topsuperview's topに固定してください。 4-5時間のためにプレーした後、最後に

enter image description here

+0

はい今、私は持っています。今回私は正しく配置しました。同じ問題が依然として存在します。 – appleBoy21

+0

達成したいことは?あなたはツールバーを隠したいですか?ツールバーをドラッグするだけですか?あなたのツールバーの高さは何ですか?そしてあなたのツールバーの「y」ポジションは何ですか? – Lion

+0

myToolbarFrame =((0、20)、(widthOfView、44)) – appleBoy21