UISegmentedControl का फ़ॉन्ट आकार बदलें


जवाबों:


502

मैं उसी मुद्दे में भाग गया। यह कोड संपूर्ण खंड नियंत्रण के लिए फ़ॉन्ट आकार सेट करता है। फ़ॉन्ट प्रकार सेट करने के लिए कुछ इसी तरह काम हो सकता है। ध्यान दें कि यह केवल iOS5 + के लिए उपलब्ध है

ओबज सी :

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

संपादित करें: UITextAttributeFontहटा दिया गया है - NSFontAttributeNameइसके बजाय उपयोग करें ।

EDIT # 2: स्विफ्ट 4 NSFontAttributeNameके लिए बदल दिया गया है NSAttributedStringKey.font

स्विफ्ट 5 :

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

स्विफ्ट 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)

स्विफ्ट 2.2 :

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

@ ऑड्रे-गोर्डीव से स्विफ्ट कार्यान्वयन के लिए धन्यवाद


4
यह बहुत अच्छा काम करता है, हालांकि अगर मैंने पहले से ही किया है [mySegmentedControl setTintColor:onColor forTag:kTagOnState];और तत्कालीन कलर्स को [mySegmentedControl setTintColor:offColor forTag:kTagOffState];लागू किया है [mySegmentedControl setTitleTextAttributes:attributes forState:UIControlStateNormal];तो मैं अभी दूर चला जाऊंगा।
स्कूटर 13

3
iOS 5.0 या बाद के संस्करण में उपलब्ध है
rakeshNS

8
iOS7 में:NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldsystemFontOfSize:12.0f]};
जेसन मूर

2
@JasonMoore boldSystemFontOfSize:(राजधानी प्रणाली के लिए रों)
Guillaume

1
IOS 8 में एक इलाज करता है। मुझे फिर से याद दिलाएं, कोई "फ़ॉन्ट" विशेषता क्यों नहीं है ...? (Apple के पास करने के लिए बहुत सारे स्पष्टीकरण हैं ...!)
माइक गिल्डहिल

52

IOS 5.0+ में Appearance API का उपयोग करें:

[[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


5
UITextAttributeFontके NSFontAttributeNameबजाय उपयोग - मूल्यह्रास किया गया है ।
पोर्टलैंड रनर

6
यह देखते हुए कि यह ALL के फ़ॉन्ट को बदल देगा UISegmentedControl
Vive

36

यहाँ स्वीकृत उत्तर का एक स्विफ्ट संस्करण है:

स्विफ्ट 3 :

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

स्विफ्ट 2.2 :

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

13

एक अन्य विकल्प नियंत्रण में परिवर्तन लागू करना है। हालांकि, यह नियंत्रण सीमाओं सहित सब कुछ को माप देगा।

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

इस सरल कार्य कोड के लिए धन्यवाद। IOS6 में इसे .75f में स्केल करना सबसे अच्छा परिणाम प्रदान करता है। यदि एक टेबल सेल में उपयोग किया जाता है, तो सेल की ऊंचाई में 10 जोड़ें।
कोजेलब्रोब

1
यह वह तरीका नहीं है जो आप iOS में किसी भी नियंत्रण पर फ़ॉन्ट आकार बदलते हैं। Affine transform ज्यादातर एनिमेशन के साथ इस्तेमाल करने का इरादा रखता है।
वातोम

1
कृपया मानक नियंत्रणों को मापें नहीं।
माइकल पीटरसन

@MichaelPeterson बहुत अधिक अनुकूलन मानक नियंत्रण रखना अच्छा होगा, इसलिए किसी को भी इस तरह हैक करने की आवश्यकता नहीं है।
ज़ापोरोज़ेन्को ऑलेक्ज़ेंडर

9

स्विफ्ट शैली:

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

1
आपको स्विफ्ट स्टाइल शब्दकोश का उपयोग करना चाहिए। [NSFontAttributeName: font]
ऑस्क्लेर

8

यहाँ मैंने iOS8 के लिए अपडेट किया है

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

7

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)

पूर्वावलोकन


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

यदि आपके पास कोई प्रश्न है, तो मुझसे संपर्क करें।


objFontnil मान लौटाता है ।
itzmebibin

3

सी # / ज़ामरीन:

segment.SetTitleTextAttributes(new UITextAttributes { 
    Font = UIFont.SystemFontOfSize(font_size) }, UIControlState.Normal);

3

स्विफ्ट 4

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

त्रुटि: Instance member 'setTitleTextAttributes' cannot be used on type 'UISegmentedControl'; did you mean to use a value of this type instead? iOS13 / स्विफ्ट 5
स्काई

2

डैनियल ने मुझे सही तरीका बताया। मैंने इसे इस तरह इस्तेमाल किया-

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;

1

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)
    }
 }

1
 UISegmentedControl.appearance().setTitleTextAttributes(NSDictionary(objects: [UIFont.systemFont(ofSize: 16.0)],
                                                                        forKeys: [kCTFontAttributeName as! NSCopying]) as? [AnyHashable : Any],
                                                           for: UIControlState.normal)

हालांकि यह कोड इस सवाल का जवाब दे सकता है कि समस्या को हल करने के तरीके की जानकारी कैसे और क्यों प्रदान करती है, इसके दीर्घकालिक मूल्य में सुधार होता है
L_J


0

आप UISelectedolontrol के साथ शुरू होने वाले प्रत्येक दृश्य की पुनरावर्ती जांच करके UILabel के लिए वास्तविक फ़ॉन्ट पर प्राप्त कर सकते हैं। मुझे नहीं पता कि यह ऐसा करने का सबसे अच्छा तरीका है, लेकिन यह काम करता है।

@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

ऊपर दिए गए कोड में मैं सिर्फ यूआईबेल का टेक्स्ट कलर सेट कर रहा हूं, लेकिन आप फ़ॉन्ट प्रॉपर्टी को हड़प सकते हैं या सेट कर सकते हैं।


यह सुनिश्चित करने का एक शानदार तरीका है कि iOS अपडेट से आपके ग्राहकों को आपके द्वारा भेजे गए कोड को तोड़ दिया जाएगा। यह अब काम कर सकता है, लेकिन इसकी कोई गारंटी नहीं है कि यह भविष्य में काम करना जारी रखेगा।
अपूर्व खात्रेजा

0

यह mysegmentedcontrol के स्थान पर अपने खंडित नियंत्रण नाम जोड़ने के उद्देश्य से है

UIFont *font = [UIFont systemFontOfSize:11.0f];

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

[mySegmentedcontrol setTitleTextAttributes:attributes                                    forState:UIControlStateNormal];

आशा करता हूँ की ये काम करेगा


1
- अद्यतन - NS सहारे * विशेषताएँ = @ {NSFontAttributeName: font}; [mySegmentedcontrol setTitleTextAttributes: विशेषताएँ forState: UIControlStateNut];
बेनी डेविडोवित्ज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.