2011-04-12 60 views
0

我已經在詳細視圖中使用UIToolbar創建了分割視圖。我添加了一個UILabel以放置標題文本。我用一些建議來構建它,但我注意到,當處於縱向模式時(當主視圖的彈出按鈕存在時),文本不是居中。它被彈出按鈕的寬度所抵消。我嘗試減去彈出窗口的寬度,但彈性隔離框似乎將其放回。我還嘗試了各種寬度的self.titleLabel(例如self.view.frame.size.width)。居中在橫向模式下工作正常(因爲沒有彈出式按鈕)。任何人都看到這個,並有一個建議?謝謝!在分割視圖的UIToolbar上正確對齊文本註釋

- (void)toolbarTitleWithNSString:(NSString *)titleString { 
NSMutableArray *items = [[self.toolbar items] mutableCopy]; 

UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace 
                     target:nil 
                     action:nil]; 
[items addObject:spacer]; 

self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 
                  11.0f, 
                  100.0f, 
                  21.0f)]; 
[self.titleLabel setFont:[UIFont boldSystemFontOfSize:18.0]]; 
[self.titleLabel setBackgroundColor:[UIColor clearColor]]; 
[self.titleLabel setShadowColor:UIColorFromRGB(0xe5e7eb80)]; 
[self.titleLabel setShadowOffset:CGSizeMake(0, -1.0)]; 
[self.titleLabel setTextColor:UIColorFromRGB(0x717880ff)]; 
[self.titleLabel setText:titleString]; 
[self.titleLabel setTextAlignment:UITextAlignmentCenter]; 
UIBarButtonItem *title = [[UIBarButtonItem alloc] initWithCustomView:self.titleLabel]; 
[items addObject:title]; 
[title release]; 

[items addObject:spacer]; 
[spacer release]; 

[self.toolbar setItems:items animated:YES]; 
[items release]; 
} 

#pragma mark - 
#pragma mark Managing the popover 

- (void)showRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem { 
    // Add the popover button to the toolbar array. 
    NSMutableArray *itemsArray = [toolbar.items mutableCopy]; 
    [itemsArray insertObject:barButtonItem atIndex:0]; 

    [toolbar setItems:itemsArray animated:NO]; 
    [itemsArray release]; 
} 

- (void)invalidateRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem { 
    // Remove the popover button from the toolbar array. 
    NSMutableArray *itemsArray = [toolbar.items mutableCopy]; 
    [itemsArray removeObject:barButtonItem]; 
    [toolbar setItems:itemsArray animated:NO]; 
    [itemsArray release]; 
} 
+0

因此,我找到了一個解決方案,但我不知道它是最好的。我在[self.toolbar setItems:items animated:YES]之前添加了以下代碼: UIBarButtonItem * fixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; fixedSpace.width = 33.0f; [items addObject:fixedSpace]; [fixedSpace release]; – TimN 2011-04-13 19:01:50

+0

這繼續在兩個方向上工作,所以看起來柔性墊片如預期的那樣處理固定空間。 (固定空間的寬度是UIBarButtonItem的寬度,但是,當我嘗試讀取寬度時,它總是返回0,因此是硬編碼;我將在稍後處理)。 – TimN 2011-04-13 19:05:00

+0

通過使用barButtonItem.image.size.width,UIBarButtonItem的寬度。 (使用自定義圖像) – TimN 2011-04-13 19:14:17

回答

0

你可以嘗試這個我不知道天氣它會工作與否。 檢查SPLITVIEW的委託方法

最初ü可以設置標籤的框架人像模式,然後當u從橫向更改歲模式,人像

- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)pc 
    { 
     // this time label's frame will be same as u write before when u init yr label at viewdidload or somewhr else 
     [self.titleLabel setFrame:CGRectMake(x,y,sizex,sizey)]; 

    } 

但是當u從寫真模式改變爲橫向這種方法稱爲這種方法將被調用,所以可以按照以下方法修改yr標籤的框架:

- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem 
{ 
     [self.titleLabel setFrame:CGRectMake(x1,y1,sizex,sizey)]; 
} 
+0

謝謝,我會嘗試。 – TimN 2011-04-24 19:04:11