我有一个视图,我想在其中添加多个子视图,但是当我添加它们时,它们会定位在我没有设置框架的位置。 x
坐标是正确的,但y
已完全关闭。
使用Interface Builder它非常流畅,只需将它们拖入并发送正确的帧和原点即可。但是我似乎无法设定原点;我尝试expression is not assignable
后得到view.frame.origin = CGPointMake(x, y)
,直接设置x
和y
坐标会给我同样的错误。
是否会发生这种情况,因为如果不设置特殊属性(我缺少),子视图不能以编程方式重叠?
编辑:视图正在UITableViewCell的initWithStyle
方法中设置。
编辑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);
答案 0 :(得分: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;
答案 1 :(得分: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);