2010-02-17 5 views

ответ

13

Другой вариант - применить преобразование к элементу управления. Тем не менее, это уменьшит все, включая границы управления.

segmentedControl.transform = CGAffineTransformMakeScale(.6f, .6f); 
+0

Благодаря простому рабочему коду. Наилучший результат дает масштабирование до 0,75f в iOS6. Если используется в ячейке таблицы, добавьте 10 к высоте ячейки. – kjoelbro

+0

Это не то, как вы меняете размер шрифта на любом элементе управления в iOS. Аффинное преобразование в основном предназначено для использования с анимацией. – vahotm

+0

Пожалуйста, не масштабируйте стандартные элементы управления. –

2

Даниил указал мне на правильный путь. Я использовал его как this-

float scaleFactor = 0.8f; 

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] 
initWithFrame:CGRectMake(10, 70, 300/scaleFactor,35)]; 

[segmentedControl insertSegmentWithTitle:@"..." atIndex:0 animated:NO]; 
[segmentedControl insertSegmentWithTitle:@"..." atIndex:1 animated:NO]; 
[segmentedControl insertSegmentWithTitle:@"..." atIndex:2 animated:NO]; 

segmentedControl.transform = CGAffineTransformMakeScale(scaleFactor, 1); 
CGPoint segmentedControlCenter = segmentedControl.center; 
segmentedControlCenter.x = self.center.x; 
segmentedControl.center = segmentedControlCenter; 
0

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

@interface tmpSegmentedControlTextViewController : UIViewController { 
} 

@property (nonatomic, assign) IBOutlet UISegmentedControl * theControl; 

@end 

@implementation tmpSegmentedControlTextViewController 

@synthesize theControl; // UISegmentedControl 

- (void)viewDidLoad { 
    [self printControl:[self theControl]]; 
    [super viewDidLoad]; 
} 

- (void) printControl:(UIView *) view { 
    NSArray * views = [view subviews]; 
    NSInteger idx,idxMax; 
    for (idx = 0, idxMax = views.count; idx < idxMax; idx++) { 
    UIView * thisView = [views objectAtIndex:idx]; 
    UILabel * tmpLabel = (UILabel *) thisView; 
    if ([tmpLabel respondsToSelector:@selector(text)]) { 
     NSLog(@"TEXT for view %d: %@",idx,tmpLabel.text); 
     [tmpLabel setTextColor:[UIColor blackColor]]; 
    } 

    if (thisView.subviews.count) { 
     NSLog(@"View has subviews"); 
     [self printControl:thisView]; 
    } 
    } 
} 

@end 

В коде выше я просто задающего цвет текста UILabel, но вы могли бы захватить или установить свойство шрифта, а я полагаю.

400

Я столкнулся с той же проблемой. Этот код устанавливает размер шрифта для всего сегментарного элемента управления. Что-то подобное может работать для установки типа шрифта. Обратите внимание, что эта функция доступна только для iOS5 +

Obj C:

UIFont *font = [UIFont boldSystemFontOfSize:12.0f]; 
NSDictionary *attributes = [NSDictionary dictionaryWithObject:font 
                 forKey:NSFontAttributeName]; 
[segmentedControl setTitleTextAttributes:attributes 
           forState:UIControlStateNormal]; 

EDIT: UITextAttributeFont устаревшим - используйте вместо NSFontAttributeName.

EDIT # 2: для Swift 4 NSFontAttributeName был изменен на NSAttributedStringKey.font.

Свифта 4:

let font = UIFont.systemFont(ofSize: 16) 
segmentedControl.setTitleTextAttributes([NSAttributedStringKey.font: font], 
             for: .normal) 

Свифта 3:

let font = UIFont.systemFont(ofSize: 16) 
segmentedControl.setTitleTextAttributes([NSFontAttributeName: font], 
             for: .normal) 

Swift 2.2:

let font = UIFont.systemFontOfSize(16) 
segmentedControl.setTitleTextAttributes([NSFontAttributeName: font], 
    forState: UIControlState.Normal) 

Благодаря Swi фут реализация от @ Audrey-Гордеев

+4

Это прекрасно работает, хотя если я уже сделал «[mySegmentedControl setTintColor: onColor forTag: kTagOnState];» и «[mySegmentedControl setTintColor: offColor forTag: kTagOffState];», то примените \t '[mySegmentedControl setTitleTextAttributes: attributes forState: UIControlStateNormal]; 'тогда Цвета, которые я только что установил, ушли. – scooter133

+0

Вам нужно использовать dictionaryWithObjects: forKeys и создать два массива с вашими объектными и ключевыми атрибутами. – runmad

+0

Код работал отлично для меня, как есть. – shkschneider

50

Используйте Appearance API в прошивке 5.0+:

[[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"STHeitiSC-Medium" size:13.0], UITextAttributeFont, nil] forState:UIControlStateNormal]; 

Ссылка: http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIAppearance_Protocol/Reference/Reference.html#//apple_ref/doc/uid/TP40010906

http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5

+4

'UITextAttributeFont' был обесценен - ​​вместо этого используйте' NSFontAttributeName'. –

+1

Стоит отметить, что он изменит шрифт ALL 'UISegmentedControl's. – Vive

8

Swift Стиль:

UISegmentedControl.appearance().setTitleTextAttributes(NSDictionary(objects: [UIFont.systemFontOfSize(14.0)], forKeys: [NSFontAttributeName]), forState: UIControlState.Normal) 
+0

Вы должны использовать словарь быстрого стиля. '[NSFontAttributeName: font]' – osrl

29

Вот быстрая версия принятого ответ:

Свифта 3:

let font = UIFont.systemFont(ofSize: 16) 
segmentedControl.setTitleTextAttributes([NSFontAttributeName: font], 
             for: .normal) 

Swift 2.2:

let font = UIFont.systemFontOfSize(16) 
segmentedControl.setTitleTextAttributes([NSFontAttributeName: font], 
    forState: UIControlState.Normal) 
0

это для Objective C добавить сегментированный имя элемента управления вместо mysegmentedcontrol

UIFont * шрифт = [UIFont systemFontOfSize: 11.0f];

NSDictionary * attributes = [NSDictionary dictionaryWithObject: font forKey: UITextAttributeFont];

[mySegmentedcontrol setTitleTextAttributes: attributes forState: UIControlStateNormal];

надеюсь, что это помогает

7

Здесь я обновил для iOS8

[[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"STHeitiSC-Medium" size:13.0], NSFontAttributeName, nil] forState:UIControlStateNormal]; 
+0

Его работа для меня. –

4
// Set font-size and font-femily the way you want 
UIFont *objFont = [UIFont fontWithName:@"DroidSans" size:18.0f]; 

// Add font object to Dictionary 
NSDictionary *dictAttributes = [NSDictionary dictionaryWithObject:objFont forKey:NSFontAttributeName]; 

// Set dictionary to the titleTextAttributes 
[yourSegment setTitleTextAttributes:dictAttributes forState:UIControlStateNormal]; 

Если у вас есть запрос, свяжись со мной.

+0

** objFont ** возвращает значение "nil'. –

0

Расширение для UISegmentedControl для установки размера шрифта.

extension UISegmentedControl { 
    @available(iOS 8.2, *) 
    func setFontSize(fontSize: CGFloat) { 
      let normalTextAttributes: [NSObject : AnyObject]! 
      if #available(iOS 9.0, *) { 
       normalTextAttributes = [ 
        NSFontAttributeName: UIFont.monospacedDigitSystemFontOfSize(fontSize, weight: UIFontWeightRegular) 
       ] 
      } else { 
       normalTextAttributes = [ 
        NSFontAttributeName: UIFont.systemFontOfSize(fontSize, weight: UIFontWeightRegular) 
       ] 
      } 

     self.setTitleTextAttributes(normalTextAttributes, forState: .Normal) 
    } 
} 
5

XCode 8.1, Свифта 3

import UIKit 
class ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     UISegmentedControl.appearance().setTitleTextAttributes(NSDictionary(objects: [UIFont.systemFont(ofSize: 24.0)], 
     forKeys: [NSFontAttributeName as NSCopying]) as? [AnyHashable : Any], 
     for: UIControlState.normal) 
    } 
} 

просто изменить значение номера (ofSize: 24.0)

Preview

+0

Прекрасно работает в Swift 3 и Xcode 8.2 – deijmaster

0

C#/Xamarin:

segment.SetTitleTextAttributes(new UITextAttributes { 
    Font = UIFont.SystemFontOfSize(font_size) }, UIControlState.Normal); 
Смежные вопросы