xcode target-c предупреждения - PullRequest
1 голос
/ 20 июля 2009

Я относительно новичок в объективе-c ... Я использую iphone 3.0 SDK

У меня есть UIView, который является подпредставлением, которое я хочу изменить при определенных обстоятельствах.

То, как я это делаю, находится в классе контроллера.

например,

CGSize el = CGSizeMake(30, 40);
[self.subview setSize:el];

приведенный выше код работает , но компилятор выдает предупреждение: «UIView» может не отвечать на «setSize:»

На каком-то уровне «если это не сломано, я не хочу это исправлять», но я немного волнуюсь, что делаю что-то не так.

Есть идеи, почему я получаю предупреждение и как я могу это исправить?

ТИА

Ответы [ 3 ]

3 голосов
/ 20 июля 2009

Это, вероятно, означает, что setSize для UIView внедрено, но не отображается в заголовочном файле, импортированном в проект. Это делает его недокументированным API, то есть однажды он может изменить и сломать ваш код :)

И, конечно же, если вы обратитесь к документации UIView, вы не найдете ссылки на свойство size. Так что я бы избежал этого.

Вместо этого следует использовать свойство frame

CGSize el = CGSizeMake(30, 40);
CGRect bounds = CGself.subview.bounds;
bounds.size = el;
CGself.subview.bounds = bounds;

Дайте этому шанс.

0 голосов
/ 09 сентября 2015

Ниже приведено более подробное объяснение, использующее свойство frame для myView:

[self.myView.frame = CGRectMake(x, y, width, height)];

Где:

  • x, координата FOR в верхнем левом углу вашего видаимея в качестве ссылки верхний левый угол своих родителей координата "х".
  • y, то же, что и x, но ось y
  • ширина, горизонтальный размер рамки
  • высота, вертикальный размер рамки

iEУ вас есть вид, который соответствует границам экрана, поэтому его координата (0,0) будет такой же, как в левом верхнем углу экрана вашего устройства.если вы хотите добавить подпредставление чуть меньше размера экрана и расположить его по центру по горизонтали и вертикали, вот установка:

[self.myView.frame = CGRMake ( 20 , 20 , self.view.frame.size.width-40, self.view.frame.size.height-40);

В этом примере рамка внутри вида устанавливается и центрируется.Обратите внимание, что мы вычли 40 на ширину, соответствующую: 20 левой стороне, 20 правой стороне, и так же для вертикальных корректировок.

Этот код также будет работать в портретном и альбомном режимах.

0 голосов
/ 20 июля 2009

Правильнее всего здесь использовать что-то другое вместо закрытого свойства size. Но для обсуждения: если вы хотите избавиться от предупреждения, вы можете заявить, что знаете о свойстве size где-то в верхней части вашего файла реализации:

#import "MyClass.h"

@interface UIView (private)
- (void) setSize: (CGSize) newSize;
@end

@implementation MyClass
…
@end

Компилятор перестанет жаловаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...