1

我对objective-c比较陌生...我正在使用iphone 3.0 SDK

我有一个 UIView,它是一个子视图,我想在某些情况下调整它的大小。

我这样做的方式是在控制器类中。

例如,

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

上面的代码确实有效,但编译器会发出警告:'UIView' may not respond to 'setSize:'

在某种程度上,“如果它没有坏,我不想修复它”,但我有点担心我做错了什么。

关于为什么我收到警告以及如何解决它的任何想法?

TIA

4

3 回答 3

3

这可能意味着setSizeforUIView已实现,但未显示在导入项目的头文件中。这使它成为一个未记录的 API,即有一天它可能会更改和破坏您的代码:)

果然,如果你去 UIView 的文档,你会发现对 size 属性没有任何参考。所以我会避免它。

你应该使用的是frame属性

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

试一试。

于 2009-07-20T03:41:20.910 回答
0

这里正确的做法是使用其他东西而不是非公共size财产。但是为了讨论:如果你想摆脱警告,你可以size在你的实现文件顶部声明你知道这个属性:

#import "MyClass.h"

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

@implementation MyClass
…
@end

编译器将停止抱怨。

于 2009-07-20T03:59:04.557 回答
0

下面是使用“myView”的“frame”属性更详细的解释:

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

Where:

  • x, coordinate FOR the top left corner of your view having as reference the top left corner of its parents "x" coordinate.
  • y, same as x but y axis
  • width, horizontal size of the frame
  • height, vertical size of the frame

i.E. You have a view which fits to the screen bounds, so its coordinate (0,0) will be the same as your device screen top left corner. if you want to add a subview barely smaller that the screen size and center it horizontally and vertically, here is the set up:

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

This example sets the frame inside the view and centered. Note that we subtract 40 to the width corresponding to: 20 left side, 20 right side, and so the same for vertical adjustments.

This code will also work in portrait and landscape mode.

于 2015-09-09T16:28:31.767 回答