2016-09-22 7 views
0

ок, я добавил кнопку на .swift раскадровку, я затем добавил следующий код на ViewController.swiftSwift3 центр UIButton

@IBOutlet weak var HelloButton: UIButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    HelloButton.frame.origin.x = view.frame.size.width/2 



} 

Однако, когда я проверить это на моем iPhone 5s он перемещает его справа от моего экрана и не делает его центрированным. Я не уверен, что мне нужно сделать, чтобы кнопка была центрирована.

Да, это мое первое приложение helloWorld и, возможно, над моей головой, но я понимаю, что веб-программирование, и я понимаю, чтобы сделать его центром автоматически. Мне нужно иметь ширину экрана и общую ширину кнопки. то мне нужно сказать кнопку, чтобы разделить ширину вид экрана на 2.

, например, в CSS мы делаем это

#button{margin:0 auto;} 

, но это не HTML или CSS. ЭТО SWIFT3

+0

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

+0

Попробуйте перейти на viewWillAppear ИЛИ, возможно, даже лучше, viewWillLayoutSubviews. Кадры не всегда настраиваются и корректируются во время просмотраDidLoad. – Mike

ответ

2

Попробуйте это:

HelloButton.center.x = view.frame.width/2 

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

Кроме того, имя переменной должно быть в нижнем регистре, а затем код конвенции

+0

это сработало для меня, и я добился того, что я искал, я объединил этот код с приведенным ниже из @Wilson Balderrama Таким образом, не имеет значения, в каком направлении экран будет повернут, он будет центрироваться посередине. Я попытался поместить этот код прямо в область viewDidLoad, и, хотя он работает, он не автоцентрировался, когда экран был повернут. Причина, по которой этот вопрос получает тик, заключается в том, что он ответил на прямой вопрос, который я задал, однако для более подробного ответа два человека должны ответить на ответы Tj3n & Wilson. – RussellHarrower

+0

Если вы используете способ автоопределения, он обновит ваше представление с новым макетом после поворота: D Это действительно лучше, чем программно, поэтому вам нужно снова напомнить свое размещение пользовательского интерфейса, один совет: если вы поместите этот код в 'viewDidLayOutSubView' вместо этого из 'viewDidLoad' он может автоматически обновить для вас – Tj3n

0

в вашем проекте Autolayout включен? если включена автоматическая компоновка, а затем изменить пользовательский интерфейс в viewdidLoad: может не дать соответствующего результата. использовать -viewWillLayoutSubviews метод, чтобы сделать задачу UI, то вы хотите центрирования кнопку

myButton.center = self.view.center 

надеюсь, что он будет работать.

0

Добавить код в viewDidAppear таким образом, чтобы отображался фактический вид. Кроме того, вы должны использовать button.center.x вместо button.frame.origin.x, если вы хотите, чтобы центрировать его

2

Вы должны использовать Autolayout для достижения того, что вы хотите и как вы делаете, как следующее в вашем ViewController внутри Main.Раскадровка: (контроля + левый щелчок мыши -> перетаскивание синей линии вверх, а затем отпуская контроль и левой кнопку мыши, вы увидите всплывающее окно)

В всплывающем окне выберите варианты:

  • центр Горизонтально В Container
  • центр вертикально в контейнер

Но если вы хотите сделать это программно, сделать это в viewWillLayoutSubviews метод:

class ViewController: UIViewController { 

    @IBOutlet weak var button: UIButton! 

    override func viewWillLayoutSubviews() { 
    super. viewWillLayoutSubviews() 

    button.center = view.center 
    } 

} 
+0

Благодарим вас за предоставление функции override func - читали« Swift Programing Language 2.3 из магазина iBook от iBook », и об этом не говорится в книге, если я не ищу не в том месте – RussellHarrower

+0

, вы должны всегда обращаться к методу супер, иначе предоставленная функциональность родителем класса не будет выполнена. – Wilson