Как изменить размер UIButton
Я пытаюсь изменить размер UIButton в своем приложении для iPhone. У меня есть UIButton, синтезированный, и когда я вызываю следующий код, он перемещается по экрану, но ширина и высота кнопки никогда не меняются.
button.frame.size = CGRectMake(104, 68, 158, 70);
Например, когда я меняю высоту (70) на 40, высота кнопки не изменяется. Однако, если я изменил x или y, он будет перемещаться по экрану.
Любые идеи?
Ответы
Ответ 1
Код выше не должен компилироваться; вы пытаетесь назначить CGRect для CGSize. Проблема заключается в вводящей в заблуждение природе свойств. То, что вы делаете выше, сродни этому:
[button frame].size = CGSizeMake(150, 70);
Очевидно, это фактически не изменит размер. Что вам нужно сделать, это захватить фрейм (или границы), изменить его, а затем установить. Попробуйте следующее:
CGRect buttonFrame = button.frame;
buttonFrame.size = CGSizeMake(150, 70);
button.frame = buttonFrame;
Ответ 2
Чтобы изменить размер используемой кнопки:
[button setFrame:CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)];
Пример
[button setFrame:CGRectMake(173, 269, 130, 44)];
Убедитесь, что флажок "Использовать автозапуск" не установлен в файле Xib или раскадровке. Если параметр установлен, команда не работает.
Ответ 3
Частично проблема заключается в том, что вы изменяете возвращаемое значение метода доступа, а не используете установщик.
button.frame обманчив, это точечная нотация, которая означает [button frame]
, которая возвращает struct CGRect
, которую вы затем изменяете, и изменения спокойно отбрасываются.
Чтобы изменить фактический кадр, вам понадобится вместо этого использовать метод setter [button setFrame:], для которого точечная нотация все еще button.frame
, но на этот раз как lvalue, поэтому button.frame =
not button.frame.something =
.
Если вы по-прежнему получаете движение, часть причин этого может заключаться в том, что ваши новые значения X и Y не соответствуют старым, и, возможно, через некоторую ошибку ваши новые значения размера совпадают с старые. Попробуйте ширину 300 и высоту 300 только для пинков.
Ответ 4
CGRect rect=CGRectMake(104, 68, 158, 70);
[self.button setBounds:rect];
(кнопка должна быть объявлена как свойство в .h и синтезирована в .m)
Ответ 5
Работает без проблем, так как автозапуск и sizcllasses отключены.
В моем тесте раскадровка имеет только кнопку со своим действием, отправляя этот метод:
- (IBAction)action:(UIButton *)button {
button.frame = CGRectMake(0, 0, 158, 70);
}
Проверьте свойства вашей раскадровки.
![введите описание изображения здесь]()
Ответ 6
Должно ли это быть:
button.frame = CGRectMake(104, 68, 158, 70);
то есть. вы правильно создаете прямоугольник, но назначаете его элементу размера CGRect, называемому фреймом, а не всему CGRect. Из CGGeometry.h:
struct CGPoint {
CGFloat x;
CGFloat y;
};
struct CGSize {
CGFloat width;
CGFloat height;
};
struct CGRect {
CGPoint origin;
CGSize size;
};
Или более конкретно, вы можете написать:
button.frame.size.width=158;
button.frame.size.height=70;
button.frame.origin.x=104;
button.frame.origin.y=68;