13

Trong ứng dụng của tôi, tôi có một số tiêu đề tùy chỉnh (với chữ không phải là phông chữ) được lưu trữ trong các png mà tôi muốn đặt làm tiêu đề điều hướng của tôi. Tôi muốn các chữ cái trong các tiêu đề đều có cùng kích thước cho mỗi bộ điều khiển xem khác nhau, do đó, trong illustrator tôi đã làm việc trên tất cả cùng một kích thước và chiều rộng (affording không gian trống để tài khoản cho chuỗi ngắn hơn). Tôi làm như sau:Kiểm soát kích thước/vị trí của tiêu đề UINavigationItem

UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectAnAlbumTitleLettering"]]; 
titleImageView.contentMode = UIViewContentModeCenter; 
self.navigationItem.titleView = titleImageView; 
[titleImageView release]; 

Và có vẻ như hình ảnh được tùy tiện thay đổi kích cỡ và vị trí dựa trên các yếu tố bao gồm trên mỗi navigationBar (ví dụ: dùng nút Back, nút bên phải vv).

Tôi tự hỏi, làm thế nào tôi có thể giành quyền kiểm soát titleView để tôi có thể làm cho nó thực hiện kích thước và vị trí mà tôi muốn và vì vậy nó không phải là tùy ý thay đổi kích cỡ/định vị lại.

Trả lời

39

Thay vì sử dụng chế độ xem hình ảnh làm chế độ xem tiêu đề, hãy tạo chế độ xem khác có chế độ xem hình ảnh. Đặt rằng chế độ xem làm chế độ xem tiêu đề của mục điều hướng; giờ đây bạn được tự do điều chỉnh khung của chế độ xem hình ảnh trong chế độ xem tiêu đề.

+9

Bạn vẫn sẽ cần phải chắc chắn rằng quan điểm chứa có các kích thước phù hợp để chứa các điểm ảnh – Zorayr

29

Bạn có thể kiểm soát kích thước và vị trí của chế độ xem tựa đề UINavigationbar. Không đặt chế độ xem trực tiếp dưới dạng xem trực tiếp. Thay vào đó tạo ra một UIView tùy chỉnh và sau đó thiết lập khung của nó theo yêu cầu của bạn và thêm titleImageView của bạn như là subview của nó.

UIView *backView =[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 40)];// Here you can set View width and height as per your requirement for displaying titleImageView position in navigationbar 
[backView setBackgroundColor:[UIColor greenColor]]; 
UIImageView *titleImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"SelectAnAlbumTitleLettering"]]; 
titleImageView.frame = CGRectMake(45, 5,titleImageView.frame.size.width , titleImageView.frame.size.height); // Here I am passing origin as (45,5) but can pass them as your requirement. 
[backView addSubview:titleImageView]; 
//titleImageView.contentMode = UIViewContentModeCenter; 
self.navigationItem.titleView = backView; 

Hy vọng nó sẽ giúp bạn.

+3

Có bất kỳ lời giải thích là "tại sao" bạn không thể đặt trực tiếp ImageView? Liệu tiêu đề navigationView có làm điều gì đó sôi nổi với nó không? – rckehoe

+0

@rckehoe Hệ thống đang thay đổi khung của titleView nhưng nó không thay đổi khung của các bản xem trước titleViews. Hãy nhớ rằng chúng tôi đã không triển khai UINavigationItem. Vì vậy, có thể có các kiểm tra điều chỉnh kích thước và vị trí. – kezi

6

Trong Swift, bạn có thể làm điều đó như thế này:

var titleView = UIView(frame: CGRectMake(0, 0, 100, 40)) 
    var titleImageView = UIImageView(image: UIImage(named: "cocolife")) 
    titleImageView.frame = CGRectMake(0, 0, titleView.frame.width, titleView.frame.height) 
    titleView.addSubview(titleImageView) 
    navigationItem.titleView = titleView 
Các vấn đề liên quan