1

我有一个要添加多个子视图的视图,但是当我添加它们时,它们会定位在我没有设置框架的位置。坐标是正确的x,但y相当偏离。

使用 Interface Builder 进行得很顺利,只需将它们拖入并发送正确的帧和原点即可。但是我似乎无法设置原点;expression is not assignable当我尝试时,我得到view.frame.origin = CGPointMake(x, y)了,并且直接设置xy坐标给了我同样的错误。

发生这种情况是因为子视图不能以编程方式重叠而不设置特殊属性(我错过了)?

编辑:视图是在initWithStyleUITableViewCell 的方法中设置的。

编辑 2:在initWithStyle方法中添加了代码。

// Initialize images
self.imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image"]];
self.anImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"anImage"]];
self.anotherImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"anotherImage"]];

// Set imageview locations
self.imageView.frame = CGRectMake(0, 0, 300, 54);
self.anImageView.frame = CGRectMake(20, 53, 16, 52);
self.anotherImageView.frame = CGRectMake(179, 43, 111, 53);
4

2 回答 2

3

为避免expression is not assignable,您必须一次设置整个框架,或者使用

view.frame = CGRectMake(x, y, width, height)

或者

CGRect frame = self.view.frame;
frame.origin.x = newX;
self.view.frame = frame;
于 2013-07-31T20:48:45.043 回答
2

您很可能正在viewDidLoad方法中设置框架。这里的问题是您在根据应用程序的约束调整 viewControllers 框架的大小之前设置框架。

尝试将您的框架设置移动到该方法中viewWillAppear,看看是否可以解决您的问题。

编辑:因为您是在单元格中而不是在 viewController 中执行此操作,所以您将执行以下操作:

initWithStyle:reuseIdentifier

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        self.customView = [[UIView alloc] initWithFrame:CGRectZero];

    }

    return self;
}

然后覆盖layoutSubviews以实际设置视图框架

- (void)layoutSubviews
{  
    [super layoutSubviews];

    self.customView.frame = CGRectMake(x, y, width, height);
}

至于“表达式不可分配”警告,这是因为您不能只设置视图原点而不设置高度和宽度。利用:

view.frame = CGRectMake(x, y, width, height);

如果您想保持相同的宽度和高度而不必进行硬编码,请执行以下操作

view.frame = CGRectMake(x, y, view.frame.size.width, view.frame.size.height);
于 2013-07-31T20:49:56.280 回答