2009-07-20 4 views
1

Я относительно новый для Objective-C ... Я использую Iphone 3.0 SDKXcode Objective-C предупреждение

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

Способ, которым я занимаюсь, находится в классе контроллера.

, например,

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

выше код делает работу, но компилятор выдает предупреждение: 'UIView' может не реагировать на 'SetSize:'

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

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

ТИА

+0

спасибо вам обоим! – user141146

ответ

3

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

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

То, что вы должны использовать вместо является frame свойство

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

Дайте, что выстрел.

+0

Метод 'frame' возвращает кадр по значению, поэтому вы не можете установить его размер таким образом. Вам нужно сделать что-то вроде 'CGRect frame = self.subview.frame; frame.size = CGSizeMake (30, 40); self.subview.frame = frame; '. – Chuck

+0

Я только что проверил документацию, и вы правы – hhafez

0

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

#import "MyClass.h" 

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

@implementation MyClass 
… 
@end 

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

0

Вот ближе объяснение, используя свойство «кадр» для «MyView»:

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

Где:

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

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

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

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

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