UISementedmented নিয়ন্ত্রণের ফন্টের আকার পরিবর্তন করুন


222

কেউ দয়া করে আমাকে বলতে পারেন আমি কীভাবে ফন্টের ধরণ এবং আকার পরিবর্তন করতে পারি UISegmentedControl?


1
কোডের পরিবর্তে আইবিতে কোনও সমাধান?
Okysabeni

উত্তর:


502

আমি একই ইস্যু মধ্যে দৌড়ে। এই কোডটি পুরো সেগমেন্টযুক্ত নিয়ন্ত্রণের জন্য হরফ আকার নির্ধারণ করে। অনুরূপ কিছু হরফ প্রকার সেট করতে কাজ করতে পারে। মনে রাখবেন এটি কেবল আইওএস 5 + এর জন্য উপলব্ধ

ওবজ সি :

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

সম্পাদনা: হ্রাস UITextAttributeFontকরা হয়েছে - NSFontAttributeNameপরিবর্তে ব্যবহার করুন।

সম্পাদনা # 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)

সুইফট ২.২ :

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];করে ফেলেছি তারপরে আমি সবেমাত্র সেট করা রংগুলি প্রয়োগ করব।
স্কুটার 133

3
আইওএস 5.0 বা তার পরে পাওয়া যাবে
রাকেশএনএস

8
আইওএস 7-তে:NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldsystemFontOfSize:12.0f]};
জেসন মুর

2
@JasonMoore boldSystemFontOfSize:(মূলধন সিস্টেমের জন্য গুলি)
Guillaume,

1
আইওএসে ট্রিট কাজ করে ৮. আবার আমাকে মনে করিয়ে দিন, কেন "ফন্ট" বৈশিষ্ট্য নেই ...? (অ্যাপলকে অনেক কিছু করার আছে ...!)
মাইক গ্লেডহিল

52

আইওএস 5.0+ এ উপস্থিতি API ব্যবহার করুন:

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

লিঙ্কগুলি: http://developer.apple.com/library/ios/#docamentation/UIKit/References/UIA উপস্থিতি_প্রোটোকল / রেফারেন্স / রেফারেন্স। Html#//apple_ref / doc / uid / TP40010906

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


5
UITextAttributeFontঅবচয় করা হয়েছে - NSFontAttributeNameপরিবর্তে ব্যবহার করুন।
পোর্টল্যান্ড রানার

6
এটি লক্ষ্য করে যে এটি সমস্তগুলির ফন্টকে বদলে দেবে UISegmentedControl
ভিভ করুন

36

এখানে গৃহীত উত্তরের একটি সুইফ্ট সংস্করণ রয়েছে:

সুইফট 3 :

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

সুইফট ২.২ :

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

13

আরেকটি বিকল্প হ'ল নিয়ন্ত্রণে রূপান্তর প্রয়োগ করা। তবে এটি নিয়ন্ত্রণ সীমানা সহ সমস্ত কিছু কমিয়ে দেবে।

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

এই সহজ ওয়ার্কিং কোডকে ধন্যবাদ। এটি iOS6 এ .75f এ স্কেলিং সেরা ফলাফল সরবরাহ করে। যদি কোনও টেবিল কক্ষে ব্যবহৃত হয়, তবে ঘরের উচ্চতায় 10 যুক্ত করুন।
kjoelbro

1
আইওএসের কোনও নিয়ন্ত্রণে আপনি ফন্টের আকার পরিবর্তন করার উপায় এটি নয়। অ্যাফিন ট্রান্সফর্মটি বেশিরভাগই অ্যানিমেশনগুলির সাথে ব্যবহারের উদ্দেশ্যে।
vahotm

1
দয়া করে মান নিয়ন্ত্রণগুলি স্কেল করবেন না।
মাইকেল পিটারসন

@ মিশেল পিটারসন আরও অনেকগুলি কাস্টমাইজযোগ্য মানক নিয়ন্ত্রণগুলি পেয়ে ভাল লাগবে, তাই কারওর মতো হ্যাক করার দরকার নেই।
জাপোরোজচেনকো ওলেকসান্ডার

9

সুইফ্ট স্টাইল:

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

1
আপনার দ্রুততম স্টাইলের অভিধান ব্যবহার করা উচিত। [NSFontAttributeName: font]
osrl

8

এখানে আমি iOS8 এর জন্য আপডেট করেছি

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

7

এক্সকোড 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];

আপনার যদি কোনও প্রশ্ন থাকে তবে আমার সাথে যোগাযোগ করুন।


objFont ফেরৎ nilমান।
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? আইওএস 13 / সুইফট 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

আপনি ইউআইআইএবেলড কনট্রোল দিয়ে শুরু হওয়া প্রতিটি মতামত পুনরাবৃত্তভাবে পরীক্ষা করেই ইউআইএলবেলের আসল ফন্টে পেতে পারেন। আমি জানি না এটি করার সর্বোত্তম উপায় কিনা তবে এটি কার্যকর হয় works

@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

উপরের কোডে আমি কেবলমাত্র ইউআইএলবেলের পাঠ্য রঙটি সেট করছি তবে আপনি মনে করতে পারেন ফন্টের সম্পত্তিটি দখল বা সেট করতে পারবেন।


কোনও আইওএস আপডেটের ফলে আপনার গ্রাহকদের কাছে যে প্রেরণ করা হয়েছে তার কোডটি ভেঙে যাবে কিনা তা নিশ্চিত করার এই দুর্দান্ত উপায়। এটি এখন কার্যকর হতে পারে তবে ভবিষ্যতে এই কাজ চালিয়ে যাওয়ার কোনও নিশ্চয়তা নেই।
অপুরভ খাতরেজা

0

এটি উদ্দেশ্য সি এর জন্য মাইসেগমেন্টড কন্ট্রোলের জায়গায় আপনার বিভাগযুক্ত নিয়ন্ত্রণের নাম যুক্ত করুন

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

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

[mySegmentedcontrol setTitleTextAttributes:attributes                                    forState:UIControlStateNormal];

আশা করি এটা সাহায্য করবে


1
- আপডেট - এনএসডেটরিয় * বৈশিষ্ট্য = @ {এনএসফন্টএট্রিবিউটনেম: ফন্ট}; [মাইসিগমেন্টেড কন্ট্রোল সেটটেল টেক্সটঅ্যাট্রিবিউটস: স্ট্যাট অ্যাট্রিবিউটস: ইউআইসিএন্ট্রোলস্টেট নরমাল];
বেনি ডেভিডভিটজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.