Bất cứ ai có thể xin vui lòng cho tôi biết làm thế nào tôi có thể thay đổi loại phông chữ và kích thước của UISegmentedControl
?
Bất cứ ai có thể xin vui lòng cho tôi biết làm thế nào tôi có thể thay đổi loại phông chữ và kích thước của UISegmentedControl
?
Câu trả lời:
Tôi gặp vấn đề tương tự. Mã này đặt kích thước phông chữ cho toàn bộ điều khiển được phân đoạn. Một cái gì đó tương tự có thể làm việc để thiết lập loại phông chữ. Lưu ý rằng điều này chỉ có sẵn cho iOS5 +
Obj C :
UIFont *font = [UIFont boldSystemFontOfSize:12.0f];
NSDictionary *attributes = [NSDictionary dictionaryWithObject:font
forKey:NSFontAttributeName];
[segmentedControl setTitleTextAttributes:attributes
forState:UIControlStateNormal];
EDIT: UITextAttributeFont
đã không được chấp nhận - sử dụng NSFontAttributeName
thay thế.
EDIT # 2: Đối với Swift 4 NSFontAttributeName
đã được đổi thành NSAttributedStringKey.font
.
Swift 5 :
let font = UIFont.systemFont(ofSize: 16)
segmentedControl.setTitleTextAttributes([NSAttributedString.Key.font: font], for: .normal)
Swift 4 :
let font = UIFont.systemFont(ofSize: 16)
segmentedControl.setTitleTextAttributes([NSAttributedStringKey.font: font],
for: .normal)
Swift 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)
Nhờ các triển khai Swift từ @ audrey-gordeev
[mySegmentedControl setTintColor:onColor forTag:kTagOnState];
và [mySegmentedControl setTintColor:offColor forTag:kTagOffState];
sau đó áp dụng [mySegmentedControl setTitleTextAttributes:attributes forState:UIControlStateNormal];
sau đó Colors tôi chỉ cần đặt biến mất.
NSDictionary *attributes = @{NSFontAttributeName: [UIFont boldsystemFontOfSize:12.0f]};
boldSystemFontOfSize:
(thủ đô S cho hệ thống)
Sử dụng API giao diện trong iOS 5.0 trở lên:
[[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"STHeitiSC-Medium" size:13.0], UITextAttributeFont, nil] forState:UIControlStateNormal];
http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5
UITextAttributeFont
đã được khấu hao - sử dụng NSFontAttributeName
thay thế.
UISegmentedControl
.
Đây là phiên bản Swift của câu trả lời được chấp nhận:
Swift 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)
Một lựa chọn khác là áp dụng một biến đổi cho điều khiển. Tuy nhiên, nó sẽ thu nhỏ mọi thứ kể cả biên giới kiểm soát.
segmentedControl.transform = CGAffineTransformMakeScale(.6f, .6f);
Phong cách Swift:
UISegmentedControl.appearance().setTitleTextAttributes(NSDictionary(objects: [UIFont.systemFontOfSize(14.0)], forKeys: [NSFontAttributeName]), forState: UIControlState.Normal)
[NSFontAttributeName: font]
Ở đây tôi đã cập nhật cho iOS8
[[UISegmentedControl appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"STHeitiSC-Medium" size:13.0], NSFontAttributeName, nil] forState:UIControlStateNormal];
XCode 8.1, Swift 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)
}
}
chỉ cần thay đổi giá trị số (ofSize: 24.0)
// 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];
Nếu bạn có bất kỳ câu hỏi, liên hệ với tôi.
nil
giá trị.
Swift 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 / Swift5
Daniel chỉ cho tôi cách chính xác. Tôi đã sử dụng nó như thế này-
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;
Tiện ích mở rộng để UISegmentedControl
cài đặt Cỡ chữ.
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)
}
}
UISegmentedControl.appearance().setTitleTextAttributes(NSDictionary(objects: [UIFont.systemFont(ofSize: 16.0)],
forKeys: [kCTFontAttributeName as! NSCopying]) as? [AnyHashable : Any],
for: UIControlState.normal)
Trong swift 5
,
let font = UIFont.systemFont(ofSize: 16)
UISegmentedControl.appearance().setTitleTextAttributes([NSAttributedString.Key.font: font], for: .normal)
Bạn có thể lấy phông chữ thực tế cho UILabel bằng cách kiểm tra đệ quy từng chế độ xem bắt đầu bằng UISegmentedControl. Tôi không biết nếu đây là cách tốt nhất để làm điều đó, nhưng nó hoạt động.
@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
Trong đoạn mã trên tôi chỉ cài đặt màu văn bản của UILabel, nhưng bạn có thể lấy hoặc đặt thuộc tính phông chữ mà tôi cho là.
đây là mục tiêu c thêm tên điều khiển được phân đoạn của bạn thay cho mysegmentedcontrol
UIFont *font = [UIFont systemFontOfSize:11.0f];
NSDictionary *attributes = [NSDictionary dictionaryWithObject:font
forKey:UITextAttributeFont];
[mySegmentedcontrol setTitleTextAttributes:attributes forState:UIControlStateNormal];
hy vọng nó giúp