iOS: почему я не могу программно установить рамку для кнопки?
Это странная вещь, но я не мог понять. Я не могу программно установить рамку для кнопки.
У меня есть кнопка с IBOutlet как beyondViewButton, и я управляю ее перетаскиванием из представления в файл ViewController.m file @interface и @end, а затем @synthesized.
в методе viewDidLoad я добавил следующее:
- Ограничения UIScreen mainScreen дают неправильный размер
- Установка источника кадра в iOS
- Как вычислить высоту NSAttributedString с заданной шириной в iOS 6
- Почему я не могу изменить рамки моего UILabel?
- iOS: Добавление наблюдателя в раму UIView.origin.y?
//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)
Примечание. Я также делал анимацию поворотной трансляции кнопки.