2010-11-18 25 views
7

Một số nền: Tôi muốn có 3 nút trên UIToolBar. Tôi đã xoay xở để lấy cái giữa ở giữa và mọi thứ bằng cách đặt nó vào một số UIToolBar vào một số UIView.Thay đổi kích cỡ một UIBarButtonItem khi tiêu đề quá rộng

Mọi thứ trông giống như nó sẽ tách biệt khi tiêu đề của nút giữa quá lớn. Sau đó nó được hiển thị dưới các nút trái hoặc phải.

Tôi không thể có được chiều rộng UIToolBar hoặc UIBarButtonItems để có thể thay đổi kích thước chúng khi chúng quá lớn. 'UIBarButtonItem' có thuộc tính width thực sự tốt đẹp cho phép tôi thay đổi kích thước của điều khiển nếu nó quá lớn. Nhưng tôi không thể biết khi nào nó quá lớn!

CHỈNH SỬA: Tôi đã thực hiện một cách khó khăn cuối cùng. Tôi tính toán kích thước của văn bản và so sánh nó với kích thước pixel tối đa mà tôi thấy vừa vặn trên thiết bị. Xấu xí nhưng nó hoạt động.

+ (CGFloat)calculateTextWidth:(NSString *)text 
{ 
    CGSize fullSize = [UIScreen mainScreen].applicationFrame.size; 
    UIGraphicsBeginImageContext(fullSize); 

    CGContextRef context = UIGraphicsGetCurrentContext(); 


    // calculate the text size 
    CGContextSelectFont(context, "Helvetica", 17, kCGEncodingMacRoman); 
    CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1.0, -1.0)); 
    CGContextSetTextDrawingMode(context, kCGTextInvisible); 

    // measure the text 
    CGPoint initialTextPosition = CGContextGetTextPosition(context); 
    CGContextShowTextAtPoint(context, 0, 0, [text cStringUsingEncoding:NSASCIIStringEncoding], text.length); 
    CGPoint finalTextPosition = CGContextGetTextPosition(context); 

    return finalTextPosition.x - initialTextPosition.x; 
} 

Trả lời

8

Đặt nút thanh không gian linh hoạt Mục giữa các nút trái và phải và nút giữa; điều đó sẽ cho phép các nút bên chỉ chiếm nhiều chiều rộng khi cần và giữ nút giữa ở giữa trong khi cho phép nó phát triển thành không gian xung quanh nó.

Dưới đây là một vài ảnh chụp màn hình từ giao diện Builder của một cái gì đó tôi đã làm việc trên sáng nay cho thấy tác dụng: các mũi tên hai đầu là cách thể hiện các mục không gian linh hoạt IB của ...

Interface Builder screenshot showing toolbar with wide flexible spaces

... và cùng với một danh hiệu nữa vào nút trung tâm ...

Interface Builder screenshot showing toolbar with narrow flexible spaces

và đây là thanh công cụ với nút trung tâm ngắn hạn và dài như thấy trên IPH của tôi một 3GS:

iPhone screenshot showing toolbar with wide flexible spaces

iPhone screenshot showing toolbar with narrow flexible spaces

+1

nếu bạn thiết lập chiều rộng UIBarButtonItem đến 0.0, nó điều chỉnh chiều rộng của nó tự động, do đó không cần tính chiều rộng. Đặc biệt hữu ích khi sử dụng các chuỗi được bản địa hóa, luôn có kích thước khác nhau. –

2

Đây là một cách tốt hơn để tìm chiều rộng văn bản:

+ (CGFloat)calculateTextWidth:(NSString *)text 
{ 
    UIFont *font = [UIFont fontWithName:@"Helvetica" size:17]; 

    return [text sizeWithFont:font].width; 
} 
Các vấn đề liên quan