2014-11-07 36 views
5

Tôi cho phép người dùng thêm UITextField lên trên hình ảnh của họ như chú thích.Chia tỷ lệ kích thước UIFont so với kích thước màn hình

Tôi đã thiết kế để hình ảnh của họ là tất cả các hình vuông hoàn hảo theo kích thước màn hình iPhone của họ. Vì vậy, trên iPhone 5S của tôi, nó sẽ là 320x320 UIImageView. Một chiếc iPhone 6 sẽ là 375x375 UIImageView. Hình ảnh được đăng bởi điện thoại màn hình lớn hơn sẽ được thu nhỏ bởi imageView khi xem trong điện thoại nhỏ hơn.

Làm cách nào để thiết lập kích thước phông chữ có liên quan đến chiều rộng màn hình?

Tôi hiện đang sử dụng:

[UIFont systemFontOfSize:16.0] 

Nó sẽ là thích hợp để sử dụng này ?:

[UIFont systemFontOfSize:self.frame.size.width/20]; 

Tôi không chắc chắn kích thước điểm nào thực sự đại diện trong một kích thước phông chữ. Tôi cũng đã tìm thấy [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; nhưng tôi không chắc chắn nếu đây là những gì tôi đang tìm kiếm.

Cảm ơn

Trả lời

1

UIFont có phương pháp giúp bạn có được kích thước phông chữ hệ thống. Sau đó, bạn có thể sử dụng để tự động tính kích thước phông chữ hợp lý. Điều gì là hợp lý sẽ tùy thuộc vào bạn để thử nghiệm và thử nghiệm. Điều đó sẽ dẫn đến một cái gì đó như thế này:

UIFont *font = [UIFont systemFontOfSize:[UIFont systemFontSize]*[UIScreen mainScreen].bounds.width/375.0]; 
+0

Hmm, systemFontSize có thể thay đổi đáng kể, vì tùy thuộc vào cài đặt kích thước phông chữ iOS của người dùng chính xác? Tôi không chắc nó sẽ là một giá trị lý tưởng để sử dụng. Cảm ơn – user339946

+0

Vâng, tôi nghĩ vậy. Tuy nhiên tôi nghĩ rằng đó là một thiết lập tốt để tôn trọng. Tuy nhiên, nếu bạn không muốn thực hiện điều đó, chỉ cần xác định kích thước phù hợp với bạn làm mặc định. – Rick

1

Đó là một chút quá mức cần thiết, nhưng để có được chắc chắn văn bản của tôi phù hợp trên màn hình tôi đang làm một vòng lặp để tìm ra kích thước phông chữ (vì tôi đang render văn bản này trong một tùy chỉnh drawRect thực hiện (có thể có một cách tốt hơn nếu bạn đang sử dụng UILabel)

float FACTOR = 0.5f; 
    UIFont *font = [UIFont fontWithName:_fontName size:_maximumSize]; 
    // paragraph for both 
    NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; 
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 
    paragraphStyle.alignment  = NSTextAlignmentCenter; 
    // attributes for back 
    NSDictionary *attributes = @{NSFontAttributeName   : font, 
           NSParagraphStyleAttributeName : paragraphStyle}; 
    CGSize textSize = [_text sizeWithAttributes:attributes]; 
    // reduce font size until the text fits in bounds 
    while(textSize.width > _view.bounds.size.width * FACTOR || textSize.height > _view.bounds.size.height * FACTOR) 
    { 
     _maximumSize--; 
     font  = [font fontWithSize:_maximumSize]; 
     attributes = @{NSFontAttributeName   : font, 
         NSParagraphStyleAttributeName : paragraphStyle}; 
     textSize = [_progressText sizeWithAttributes:attributes]; 
    } 

Đơn giản chỉ cần điều chỉnh FACTOR để làm cho phông chữ phù hợp liên quan đến các quan điểm giới hạn

0

Trong Swift 4:.

let textToFit: String = ... 
let maxWidth: CGFloat = ... 
var font: UIFont = ... 
var textAttributes: [NSAttributedStringKey: Any] = [ 
     .font: font, 
     ... 
    ] 

while (textToFit.size(withAttributes: textAttributes).width > maxWidth) 
{ 
    font = font.withSize(font.pointSize - 1.0) 
    textAttributes[.font] = font 
} 

// You have your font now! 
Các vấn đề liên quan