Подтвердить что ты не робот

Как изменить размер UIButton

Я пытаюсь изменить размер UIButton в своем приложении для iPhone. У меня есть UIButton, синтезированный, и когда я вызываю следующий код, он перемещается по экрану, но ширина и высота кнопки никогда не меняются.

button.frame.size = CGRectMake(104, 68, 158, 70);

Например, когда я меняю высоту (70) на 40, высота кнопки не изменяется. Однако, если я изменил x или y, он будет перемещаться по экрану.

Любые идеи?

4b9b3361

Ответ 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;