2015-02-12 3 views
1

enter image description here Заранее спасибо за помощь.Создать UIbutton программно с ограничениями в swift

Я хочу создать новый пользовательский UIButton каждый раз, когда я нажимаю кнопку ADD.

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

Как бы я это сделал?

Примечание:

Я определенно понимаю, как создать кнопку программно, ее ограничения/способ получения кнопок анимировать скользя, и правильно интервал, что я не понимаю

Спасибо вам много

Изображение - быстрое представление о том, как я хочу, чтобы он выглядел. Верхняя строка до того, как я добавил несколько кнопок, а нижняя строка имеет так много кнопок, требуется новая строка.

+1

Вы можете разместить изображение каркаса, чтобы продемонстрировать, как будет выглядеть пользовательский интерфейс. – sikhapol

+0

сделаю. Дайте мне минуту – YichenBman

ответ

3

Чтобы иметь возможность анимировать мнения вы должны установить постоянный атрибут вашего ограничения переменной (значение и направление зависит от атрибута, конечно), а позже вы должны вызвать layoutIfNeeded() внутри блока анимации UIView.

Пример кода:

... 
let newButton = UIButton() 
containerView.addSubview(newButton) 
... 

// after adding the button 

let horizontalSpace = ButtonWidth + horizontalSpace * 2 
let newLeft = lastButtonX + 2 * (buttonWidth + horizontalSpace) + horizontalSpace 

let newLeftConstraint = NSLayoutConstraint(item: newButton, attribute: .Left, relatedBy: .Equal, toItem: lastButton, attribute: .Right, multiplier: 0, constant: horizontalInset) 

lastButton = newButton 

if newLeft + addButtonWidth >= screenWidth { 
    containerView.layoutIfNeeded() 
    addButtonLeftConstraint.constant = horizontalSpace 
    addButtonTopConstraint.constant = buttonRowsNumber * rowHeight + verticalSpace 
    UIView.animateWithDuration(animationTime) { 
     containerView.layoutIfNeeded() 
    } 
} else { 
    containerView.layoutIfNeeded() 
    addButtonLeftConstraint = newLeft 
    UIView.animateWithDuration(animationTime) { 
     containerView.layoutIfNeeded() 
    } 
} 

ПРИМЕЧАНИЯ:

Вы должны держать вар для каждого ограничения вы хотите анимировать позже. И в зависимости от вашего поведения макета вам также потребуется переменная к последней кнопке, чтобы вы могли выполнять измерения позиций.

постоянное число 0 представляет собой начальное состояние ограничения, когда оно было добавлено и создано, поэтому в этом начальном состоянии вид будет перемещен из исходной позиции (начиная с левой или правой или любой начальной место, которое вы выберете).

Я предлагаю вам создавать переменные NSLayoutConstraint с конструктором класса, а не использовать визуальный язык, поскольку он генерирует массив NSLayoutConstraints, и это затрудняет обнаружение ограничений для одного конкретного ограничения.

И последнее замечание: я предлагаю небольшую библиотеку AL, чтобы легче манипулировать ограничениями через код, как вы можете видеть, построение NSLayoutConstraints может быть очень скучным и сложным в обслуживании. Поскольку вы используете Swift, пожалуйста, взгляните на этот проект: https://github.com/robb/Cartography

Я использовал его в своих проектах, это действительно полезно для этих ситуаций.

+0

Awesome. Спасибо за пример.Действительно помогло – YichenBman

+0

приветствуется = D –

2

Вы можете добавить ограничение к любому виду, применяя ниже код.

self.view.addConstraints(
    NSLayoutConstraint.constraintsWithVisualFormat(
    "H:|-[myLabel]-|", options: nil, metrics: nil, views: viewsDict)) 

self.view.addConstraints(
    NSLayoutConstraint.constraintsWithVisualFormat(
    "H:|-[myButton]-|", 
    options: nil, metrics: nil, views: viewsDict)) 

self.view.addConstraints(
    NSLayoutConstraint.constraintsWithVisualFormat(
    "V:|-[myLabel]-[myButton]-|", options: nil, metrics: nil, 
    views: viewsDict)) 

Существует хороший учебник вы можете следить с: http://makeapppie.com/2014/07/26/the-swift-swift-tutorial-how-to-use-uiviews-with-auto-layout-programmatically/

+0

Отлично. Действительно оцените это – YichenBman