Есть ли способ изменить размер шрифта заголовка в UIActionSheet? - PullRequest
9 голосов
/ 13 октября 2010

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

Ответы [ 8 ]

16 голосов
/ 06 июня 2011

Вы можете изменить свойство шрифта после метода show (как showFromBarButtonItem), как показано ниже.

CGRect oldFrame = [(UILabel*)[[sheet subviews] objectAtIndex:0] frame];
UILabel *newTitle = [[[UILabel alloc] initWithFrame:oldFrame] autorelease];
newTitle.font = [UIFont boldSystemFontOfSize:17];
newTitle.textAlignment = UITextAlignmentCenter;
newTitle.backgroundColor = [UIColor clearColor];
newTitle.textColor = [UIColor whiteColor];
newTitle.text = @"My Title";
[sheet addSubview:newTitle];

[sheet release];
2 голосов
/ 27 февраля 2014

Из справочника по классам UIActionSheet :

UIActionSheet не предназначен для создания подклассов, и вы не должны добавлять представления в его иерархию.Если вам нужно представить лист с большей настройкой, чем предусмотрено API UIActionSheet, вы можете создать свой собственный и представить его модально с помощью presentViewController:animated:completion:.

2 голосов
/ 18 ноября 2011
Ответ

@ user651909 отлично подходит для меня, хотя я бы добавил еще несколько деталей:

Я должен был initWithTitle:@" " (обратите внимание на непустую строку) при создании UIActionSheet, чтобы в представлении было свободное место сверху для любого текста, с которого можно начать. Затем, после выполнения [popupQuery showInView:self.view];, я добавил его предложение, чтобы oldFrame был инициализирован. Наконец я добавил:

[newTitle sizeToFit];
newTitle.frame = CGRectMake(oldFrame.origin.x, 
                            oldFrame.origin.y, 
                            oldFrame.size.width, 
                            newTitle.frame.size.height);

Это было необходимо, поскольку высота oldFrame была слишком мала для моего более крупного шрифта (размер 20), из-за чего некоторые буквы обрезались снизу. Также даже с этой настройкой, если вы сделаете текст слишком большим, скажем, больше, чем boldSystemFontOfSize: 26, текст будет проходить слишком близко или к кнопкам ниже. Изменение размера рамки листа не помогает, поскольку кнопки, кажется, закреплены наверху.

Предположительно делает

CGRect oldFrame = [(UILabel*)[[sheet subviews] objectAtIndex:0] frame]; 

не нарушает политику Apple не использовать какой-либо внутренний API, верно?

2 голосов
/ 13 октября 2010

Как сказал Нимрод, вы не можете сделать это с помощью нативного метода. Вы можете проверить подвиды UIActionSheet, найти подходящий и изменить его свойства.

НО

  • Эта реализация может произойти сбой в Futur iOS обновление
  • Apple может отклонить ваше приложение
  • UIActionSheet является нативным элементом iPhone и пользовательский интерфейс знакомы с этим

SO

Вы действительно не должны изменять размер используемого шрифта. Если этот заголовок UIActionSheet важен, вы должны найти другой способ показать его пользователю ...

1 голос
/ 10 сентября 2013
UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"Share" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Facebook", @"Twitter",nil];
[sheet showInView:self.view];
if (![[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
     CGRect labelFrame = [(UILabel*)[[sheet subviews] objectAtIndex:0] frame];
     [[[sheet subviews] objectAtIndex:0] removeFromSuperview];
     UILabel *newTitle = [[UILabel alloc] initWithFrame:labelFrame];
     newTitle.font = [UIFont boldSystemFontOfSize:17];
     newTitle.textAlignment = UITextAlignmentCenter;
     newTitle.backgroundColor = [UIColor clearColor];
     newTitle.textColor = [UIColor whiteColor];
     newTitle.text = @"Share";
     [sheet addSubview:newTitle];
 }
0 голосов
/ 23 августа 2012

Так же, как показал conecon, вы можете получить указатель на него и манипулировать им.Если я правильно понимаю, что вы пытаетесь сделать, это:

[sheet showInView:[self.view window]];
UILabel *title = [[sheet subviews] objectAtIndex:0];
title.font = [UIFont boldSystemFontOfSize:20];
title.textAlignment = UITextAlignmentCenter;

Надеюсь, это поможет!

0 голосов
/ 10 июня 2012
UIActionSheet *as = [[UIActionSheet alloc] initWithTitle:@"SpecifySearch" 
                delegate:self 
       cancelButtonTitle:@"Cancel" 
  destructiveButtonTitle:nil 
       otherButtonTitles:@"UncategorizedContacts" , nil];

//as.actionSheetStyle = UIActionSheetStyleBlackTranslucent;
[as showFromTabBar:self.tabBarController.tabBar];

if( as.subviews.count > 0 
    && [[as.subviews objectAtIndex:0] isKindOfClass:[UILabel class]] ){
    UILabel* l = (UILabel*) [as.subviews objectAtIndex:0];
    [l setFont:[UIFont boldSystemFontOfSize:20]];
}

[as release];
0 голосов
/ 04 августа 2011

Ну, есть способ сделать это - я создал подкласс UIActionSheet на github с именем LTActionSheet

Как уже упоминалось, все виды ужасных вещей могут произойти, если вы используете его (у меня нет кода доставки ... пока :-)) Если вы используете его в приложении, которое принимается, пожалуйста, сообщите нам всем!

...