iOS CustomTableViewCell:未正确对齐的元素

时间:2014-09-10 20:43:05

标签: ios objective-c uitableview

我在构建应用时第一次学习iOS。在其中一个要求中,UITableViewCell需要看起来像 enter image description here (PS:这只是一个设计,没有为此编写代码)

但是,当我设计UITableViewCell时,它看起来像是

enter image description here
enter image description here enter image description here enter image description here

并且生成它的代码看起来像

- (void)setTransactionCell:(TransactionCell *)transactionCell transactionModel:(TransactionModel *)transactionModel {
    transactionCell.dateOfMonth.image = [self getDayImage:[UIImage imageNamed:@"1"]];
    transactionCell.dayOfWeek.image = [self getDayImage:[UIImage imageNamed:@"Sun"]];

    transactionCell.name.text = transactionModel.name;
    transactionCell.name.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:15];

    transactionCell.amount.text = transactionModel.amount;
    transactionCell.amount.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:15];

    transactionCell.categoryImage.image = [self getCategoryImage:[UIImage imageNamed:transactionModel.category]];
    transactionCell.imageView.contentMode = UIViewContentModeCenter;
}

- (UIImage *)getDayImage: (UIImage *) image {
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(30, 30), NO, 0);
    [image drawInRect:CGRectMake(0, 0, 15, 15)];
    UIImage *im2 = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return im2;
}

- (UIImage *)getCategoryImage:(UIImage *)image {
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(40, 40), NO, 0);
    [image drawInRect:CGRectMake(0, 0, 36, 36)];
    UIImage *im2 = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return im2;
}

最后当我运行应用程序时,我看到了 enter image description here

我很新,不知道出了什么问题。我拼命尝试将标签和图像拖动到每个可能的组合,但没有任何效果。我遗漏了一些非常基本的东西,你能指导一下我的错误吗?

1 个答案:

答案 0 :(得分:1)

xib上的对象每个对象至少需要4个约束。当标签/ UIImageView对象周围出现橙色线条时,这意味着约束缺失或发生冲突,通常意味着图像不会像您期望的那样在运行时显示。

对约束进行排序的最简单方法是使用界面构建器。首先,我建议选择每个对象并通过从IB底部的图标行中选择选项来清除当前约束(请参阅图片下文)

enter image description here

清除之后,要添加新约束,请再次选择对象并选择左侧用于清除约束的图标(十字架 - 请参阅选择)

在这张图片中,您会看到一个弹出窗口,您可以选择添加约束,在这种情况下,我已经选择了UILabel顶部和左侧的空间限制到最近的顶部和左手边的物体。您可以通过为特定约束选择弹簧来实现此操作,并且这会变成橙色以显示它已被选中。 (这满足了所需的最小4个约束中的两个)。接下来的两个约束(因为我不希望UIlabel在那里调整大小)是约束高度和宽度。 (在框中打勾以选择每个)

enter image description here

必须对xib上的每个UI对象重复此操作。一旦它有适当的约束,线条将全部为蓝色,这意味着没有警告(见下图 - UIImageView的约束突出显示为蓝色)

enter image description here

我希望这会对您有所帮助,但我建议您阅读有关自动布局约束的更多信息。当你掌握它们并甚至可以制作动画等等时,它们非常有用。