Центрирование текстовой заметки прямо на UIToolbar в режиме Split View - PullRequest
0 голосов
/ 13 апреля 2011

Я создал разделенное представление с UIToolbar в подробном представлении. Я добавил UILabel, чтобы разместить текст заголовка. Я использовал несколько советов для его построения, но заметил, что в портретном режиме (при наличии всплывающей кнопки основного вида) текст не центрируется. Он смещен на ширину поповерной кнопки. Я попытался вычесть ширину всплывающего окна, но гибкая прокладка, похоже, вернула его обратно. Я также пробовал различные ширины для self.titleLabel (например, self.view.frame.size.width). Центрирование отлично работает в ландшафтном режиме (так как нет кнопки popover). Кто-нибудь видел это раньше и есть предложение? Спасибо!

- (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];
}

1 Ответ

0 голосов
/ 14 апреля 2011

Вы можете попробовать это, я не знаю, будет ли это работать или нет.проверьте методы делегата splitview

изначально вы можете установить рамку метки для портретного режима, а затем этот метод будет вызываться, когда вы изменяете свой режим с альбомного на портретный

 - (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)];

    }

, но когда вы меняете режим сДля этого метода будет вызван ландшафт, поэтому можно изменить кадр метки в этом методе следующим образом:

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