Подтвердить что ты не робот

Изменение интервала между UIBarButtonItems в iOS 8

У меня есть UINavigationItem на моем контроллере представления , и я пытаюсь уменьшить интервал между двумя моими RightBarButtonItems. Вот мой код:

// 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]

Как видно, я использую FixedSpace UIBarButtonItem, но по какой-то причине это не меняет интервал. Я думал о подклассе либо UINavigationItem, либо UIBarButtonItem, чтобы я мог установить интервал соответственно, но я не мог найти никаких методов, которые я мог бы переопределить, чтобы изменить расстояние между элементами.

Любое понимание того, как решить эту проблему, будет с благодарностью!

4b9b3361

Ответ 1

Благодаря помощи @Fogmeister, я понял, что ширина объектов view1 и view2, которые UIButtons, слишком велика. Вот почему между ними произошел ненормальный промежуток. Вот мой последний код:

// Get the first button 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 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]

Я создаю фоновое изображение для первого UIButton, а затем использую его размер для создания фрейма для этого UIButton. Я выполняю те же действия для второго UIButton. Затем я создаю UIBarButtonItems из двух UIButtons. После этого я создаю 26px фиксированного пространства, а затем -7.0px фиксированного пространства. Цель первого состоит в том, чтобы создать определенное пространство между двумя кнопками. Цель последнего - переместить все UIBarButtonItems вправо. Затем я добавляю все UIBarButtonItems как rightBarButtonItems в определенном порядке, поэтому я получаю вид, который я хочу.

Теперь он отлично работает! Спасибо за всю помощь, Fogmeister!

Ответ 2

Другим способом является изменение левой и правой вставки изображения в IB.

введите описание изображения здесь

Ответ 3

Из docs для UIBarButtonItem...

enter image description here

Если значение равно 0.0 или отрицательное, элемент устанавливает ширину комбинированного изображения и названия для соответствия.

Если вы установите ширину на -20.0, она будет игнорировать ее и использовать стандартную ширину.

Что вы пытаетесь достичь с отрицательной шириной? Я почти уверен, что будет лучший способ.