2014-10-28 16 views
21

Tôi có một UINavigationItem trên bộ điều khiển xem và tôi đang cố gắng giảm khoảng cách giữa hai số RightBarButtonItems. Đây là một số mã của tôi:Thay đổi khoảng cách giữa UIBarButtonItems trong iOS 8

// Create two UIBarButtonItems 
    let item1:UIBarButtonItem = UIBarButtonItem(customView: view1) 
    let item2:UIBarButtonItem = UIBarButtonItem(customView: view2) 

    var fixedSpace:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil) 
    fixedSpace.width = -20.0 

    // Add the rightBarButtonItems on the navigation bar 
    viewController.navigationItem.rightBarButtonItems = [item2, fixedSpace, item1] 

Có thể thấy, tôi đang sử dụng FixedSpace UIBarButtonItem, nhưng điều này không thay đổi khoảng cách vì một lý do nào đó. Tôi đã nghĩ về việc phân lớp là UINavigationItem hoặc UIBarButtonItem để tôi có thể đặt khoảng cách cho phù hợp, nhưng tôi dường như không thể tìm thấy bất kỳ phương pháp nào mà tôi có thể ghi đè để thay đổi khoảng cách giữa các mục.

Bất kỳ thông tin chi tiết nào về cách giải quyết vấn đề này sẽ được đánh giá rất nhiều!

Trả lời

18

Nhờ trợ giúp của @ Fogmeister, tôi đã tìm ra rằng chiều rộng của các đối tượng view1view2, là UIButtons, quá lớn. Đó là lý do tại sao có khoảng cách bất thường giữa chúng. Đây là mã cuối cùng của tôi:

// Get the first button's image 
    var view1Img:UIImage = UIImage(named: "Image1")! 

    // Create the first button 
    var view1:UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: view1Img.size.width, height: view1Img.size.height)) 

    // Get the second button's image 
    var view2Img:UIImage = UIImage(named: "Image2")! 

    // Create the second button 
    var view2:UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: view2Img.size.width, height: view2Img.size.height)) 

    // Create two UIBarButtonItems 
    let item1:UIBarButtonItem = UIBarButtonItem(customView: view1) 
    let item2:UIBarButtonItem = UIBarButtonItem(customView: view2) 

    // Set 26px of fixed space between the two UIBarButtonItems 
    var fixedSpace:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil) 
    fixedSpace.width = 26.0 

    // Set -7px of fixed space before the two UIBarButtonItems so that they are aligned to the edge 
    var negativeSpace:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FixedSpace, target: nil, action: nil) 
    negativeSpace.width = -7.0 

    // Add the rightBarButtonItems on the navigation bar 
    viewController.navigationItem.rightBarButtonItems = [negativeSpace, item2, fixedSpace, item1] 

tôi có thể tạo hình nền cho các UIButton đầu tiên và sau đó sử dụng kích thước của nó để tạo ra các khung cho UIButton đó. Tôi thực hiện các hành động tương tự cho số UIButton thứ hai. Sau đó, tôi tạo UIBarButtonItems từ hai số UIButtons. Sau đó, tôi tạo 26px không gian cố định và sau đó -7,0px không gian cố định. Mục đích của mục đích trước đây là tạo ra một khoảng không gian nhất định giữa hai nút. Mục đích của mục đích sau là di chuyển tất cả UIBarButtonItems sang bên phải. Sau đó, tôi thêm tất cả các UIBarButtonItems làm rightBarButtonItems theo thứ tự cụ thể để tôi có được giao diện mà tôi muốn.

Nó hoạt động tốt ngay bây giờ! Cảm ơn tất cả sự giúp đỡ, Fogmeister!

5

Từ docs for UIBarButtonItem...

enter image description here

Nếu giá trị là 0.0 hoặc tiêu cực, mục thiết lập chiều rộng của hình ảnh kết hợp và tiêu đề cho phù hợp.

Nếu bạn đặt chiều rộng thành -20.0, nó sẽ bỏ qua nó và sử dụng chiều rộng tiêu chuẩn.

Bạn đang cố gắng đạt được điều gì với chiều rộng phủ định? Tôi gần như chắc chắn sẽ có một cách tốt hơn.

+0

Cảm ơn bạn đã trả lời, Fogmeister! Tôi đã xem xét các câu hỏi SO khác về điều này, và giải pháp được đề nghị là thêm khoảng cách cố định âm giữa hai UIBarButtonItems để đóng khoảng cách giữa chúng. Mục tiêu của tôi là có ít đệm giữa item1 và item2, nhưng không có gì mà tôi tìm thấy trực tuyến đã giúp. – Alexander

+0

Điều gì sẽ xảy ra nếu bạn không thêm không gian rộng cố định? Chỉ cần thêm button1 và button2 mà không có không gian. – Fogmeister

+0

Có quá nhiều khoảng trống giữa hai mục nếu tôi không thêm không gian rộng cố định. – Alexander

11

Một cách khác chỉ bằng cách thay đổi hình ảnh trái và phải trong IB.

enter image description here

+1

Nó đã được báo cáo ở nơi khác trên stackoverflow rằng điều này di chuyển hình ảnh trực quan, nhưng không di chuyển khu vực có thể chạm vào để tương ứng với sự thay đổi trực quan. Tôi chưa tự xác minh lỗi này; khuyên bạn nên thử nghiệm để chắc chắn vòi bất cứ nơi nào trên hình ảnh nút vẫn hoạt động, đặc biệt là nếu sử dụng một bù đắp lớn. – ToolmakerSteve

+0

Tại sao phải là -23? –

Các vấn đề liên quan