iOS: почему я не могу программно установить рамку для кнопки?

Это странная вещь, но я не мог понять. Я не могу программно установить рамку для кнопки.

У меня есть кнопка с IBOutlet как beyondViewButton, и я управляю ее перетаскиванием из представления в файл ViewController.m file @interface и @end, а затем @synthesized.

в методе viewDidLoad я добавил следующее:

//x = x + widthToUse * 0.25; //y += h + 50; x = 50; //either hard code x value or set it mathematically, not working y = 300; w = 200; h = 60; //[beyondViewButton setFrame:CGRectMake(x, y, w, h)]; //not working beyondViewButton.frame = CGRectMake(x, y, w, h); //not working //[beyondViewButton setBackgroundImage:[UIImage imageNamed:@"bgImage.png"] forState:UIControlStateNormal]; //this line actually works //[beyondViewButton setTitle:@"iCool!" forState:UIControlStateNormal]; [beyondViewButton setTitle:@"iShit!" forState:UIControlStateNormal]; //change from iCool to iShit, I can see change //[self.view addSubview:beyondViewButton]; //either adding this line or not, both work 

Почему я не могу настроить фрейм?

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

Может ли кто-нибудь пролить свет на это? Благодаря!!

Дополнительная информация о диагнозе: я проверил button.description до и после того, как я установил код кадра:

  2012[25830:12503] beyond button <UIRoundedRectButton: 0x8821cd0; frame = (0 0; 0 0); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0x8821da0>> 

это до и после. Интересно, что значения фрейма не то, что я задал, как в приведенном здесь коде, у меня есть x = 50, y = 300, w = 200, h = 60, а в описании NSLog – x = 190, y = 345, w = 110, h = 94, что находится вокруг позиции, которую я видел во время выполнения. Это значения, которые я задал в раскадровке.

  2012[25830:12503] beyond button <UIRoundedRectButton: 0x8821cd0; frame = (190 345; 110 94); opaque = NO; autoresize = TM+BM; layer = <CALayer: 0x8821da0>> 

Если я прокомментировал установленные строки кадра кода, когда я проверяю описание кнопки, до и после настроек кнопки, я получил 0,0,0,0 в качестве рамки кнопки — хотя я вижу кнопки в нижней половине окна , Другим словом, строка установочного фрейма работает НЕКОТОРЫМ ПУТЕМ, но не так, как я хотел. Это просто значения раскадровки, но не те, которые я задал с помощью x, y, w, h.

Ваш рассказчик использует новые функции автоматического макета? Если это так – попробуйте отключить его для кнопки. Я не знаком с этой функцией, поэтому это слепой выстрел, но я не знаю, что еще можно подозревать.

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

Что-то похожее на это …

 [self.myButton removeFromSuperview]; [self.myButton setTranslatesAutoresizingMaskIntoConstraints:YES]; [self.myButton sizeToFit]; [self.myView addSubview:self.myButton]; 

При работе с кнопкой, которая была добавлена ​​с помощью Autolayout , у меня были проблемы с размером.

Добавление ниже строки работало хорошо для меня,

 self.button.sizeToFit() self.button.transform = CGAffineTransform(scaleX: 1, y: 1) 

Примечание. Я также делал анимацию поворотной трансляции кнопки.

Давайте будем гением компьютера.