Как изменить размер UIButton - PullRequest
12 голосов
/ 28 марта 2010

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

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

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

Есть идеи?

Ответы [ 7 ]

20 голосов
/ 28 марта 2010

Код выше не должен компилироваться; Вы пытаетесь назначить CGRect для CGSize. Проблема заключается в том, что свойства вводят в заблуждение. То, что вы делаете выше, сродни этому:

[button frame].size = CGSizeMake(150, 70);

Очевидно, это не изменит размер. Что вам нужно сделать, это взять кадр (или границы), изменить его, а затем установить его. Попробуйте это:

CGRect      buttonFrame = button.frame;
buttonFrame.size = CGSizeMake(150, 70);
button.frame = buttonFrame;
9 голосов
/ 23 января 2013

Чтобы изменить размер кнопки, которую вы делаете:

[button setFrame:CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)];

пример

[button setFrame:CGRectMake(173, 269, 130, 44)];

Убедитесь, что флажок «Использовать автоматическое расположение» не установлен в файле Xib или раскадровке. Если опция установлена, то команда не работает.

3 голосов
/ 07 августа 2011

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

button.frame обманчива, это точечная запись, которая означает [button frame], которая возвращает struct CGRect, который вы затем модифицируете, и изменения незаметно отбрасываются.

Для того, чтобы изменить фактический кадр, вам нужно вместо этого использовать метод установки [button setFrame:], для которого точечная запись по-прежнему button.frame, но на этот раз как lvalue, поэтому button.frame = не button.frame.something =.

Если вы все еще получаете поведение при перемещении, отчасти это может быть связано с тем, что ваши новые значения X и Y не соответствуют старым, и, возможно, из-за какой-то ошибки ваши новые значения размера совпадают с старые. Попробуйте ширину 300 и высоту 300 только для ударов.

2 голосов
/ 20 августа 2015

Работает без проблем, так как длинные классы авторазметки и размера деактивированы. В моем тесте у раскадровки есть только кнопка с его действием, отправленным по этому методу:

- (IBAction)action:(UIButton *)button {
    button.frame = CGRectMake(0, 0, 158, 70);
}

Проверьте свойства вашей раскадровки.

enter image description here

2 голосов
/ 07 августа 2011
CGRect rect=CGRectMake(104, 68, 158, 70);

[self.button setBounds:rect];

(кнопка должна быть объявлена ​​как свойство в .h и синтезирована в .m)

0 голосов
/ 22 марта 2018

Чтобы изменить размер кнопки с помощью Swift 3, это код:

 myButton.frame = CGRect(x: 104, y: 68, width: 158, height: 70);
0 голосов
/ 22 января 2011

Не должно ли это быть:

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

т.е. вы правильно создаете прямоугольник, но назначаете его элементу размера CGRect, называемому frame, а не всему 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...