【问题标题】:iOS: CGRectMake doesn't change position of a UILabeliOS:CGRectMake 不会改变 UILabel 的位置
【发布时间】:2013-05-21 18:10:29
【问题描述】:

我通过情节提要创建了一个标签。顺序是这样的: 视图 -> 滚动视图 -> 一堆标签。

这是我想要实现的文本输出: 12 月 2 日

包含的文本在不同的 UI 标签中以较小的字母显示。

由于月份名称是动态的并且宽度发生变化,我尝试使用 CGRectMake 来改变 封闭文本的位置。 但它不起作用。我尝试更改函数的参数,但标签保持不变。它不会从情节提要中设置的初始位置移动。

label_days_left.frame = CGRectMake(50, 10, 100, 99);

编辑:

- (void) alignDaysLeft{
    //code to align the label just after the match date
    CGFloat dateLabelWidth = [label_date.text sizeWithFont:label_date.font].width;
    CGFloat dateLabelHeight = [label_date.text sizeWithFont:label_date.font].height;
    CGFloat someGap = 0;
    CGFloat daysLeftX = label_date.frame.origin.x + dateLabelWidth + someGap;
    CGFloat daysLeftY = label_date.frame.origin.y;
    [label_date sizeToFit];
    //label_days_left.frame = CGRectMake(daysLeftX, daysLeftY, 100, dateLabelHeight);
    label_days_left.frame = CGRectMake(50, 10, 100, 99);
    label_days_left.text = [NSString stringWithFormat:@"lolo"];
    NSLog(@"date width - %f", daysLeftX);

}

label_date 是包含月份和日期的变量。 label_days_left 是我试图放在月份旁边的标签变量。

编辑 2:

编辑 3: 我创建了一个新项目。 在视图上拖了一个标签。 创建了一个出口。 合成它。

并使用以下代码移动它-

[labia setFrame:CGRectMake(0, 100, 5, 99)];

没有用。我做错了什么?

【问题讨论】:

  • 您将此代码放在哪里?它在视图控制器委托方法中吗?
  • 它在“appname_timeViewController.m”文件中。我在自定义函数中调用它。
  • 请与我们分享更多代码。每当您实际更改 UIView 的框架时,它就会更改。必须在其他地方将其更改回其原始值或导致 label_days_left 没有真正连接到视图对象。或者别的什么。
  • @HermannKlecker 我已经添加了使用 'CGRectMake' 的函数。
  • 标签是否将其文本更改为“lolo”?您是否尝试检查 label_days_left 不是 ni?这个方法结束时label_days_left的frame是什么?

标签: iphone ios cgrectmake


【解决方案1】:

您是否打开了自动布局?如果是这样,那可能是您的问题,因为您不应该担心使用 AutoLayout 设置框架,而是设置约束。

【讨论】:

  • 你先生,真棒!我对自动布局一无所知。问题解决了!但是关闭它会产生任何问题吗?
  • @Pritesh 取决于您是否使用它来支持不同的屏幕尺寸和布局。您还可以使用自动调整大小或在代码中执行以支持不同的屏幕。查看本教程(第 1 部分和第 2 部分)了解更多信息:raywenderlich.com/20881/beginning-auto-layout-part-1-of-2
  • @PriteshDesai 如果您之前没有真正使用它,关闭它应该不会导致任何问题,但您应该仔细检查以确保。我个人觉得没有它会更容易工作,但在某些情况下它可能很有用。
  • 这对我有帮助,尽管我没有对视图中的任何元素设置任何限制。由于某种原因,在我关闭视图本身的 AutoLayout 之前,设置 UILabel 的框架没有效果。
【解决方案2】:
NSString *someString = [NSString stringWithFormat:@"%@",label_date.text]
UIFont *yourFont = [UIFont systemFontOfSize:22.0];
CGSize stringBoundingBox = [someString sizeWithFont:yourFont];
[label_days_left setFrame:CGRectMake(label_days_left.frame.origin.x, 10, stringBoundingBox.width, 99)];
[label_days_left setText:someString];

请尝试一次....

【讨论】:

  • 嗨 Vijay,我试过你的代码,但它不起作用。然后我创建了一个带有单个标签的新项目,但它仍然无法正常工作。我已经概述了我在编辑中所做的所有步骤。请看一下。它只需要来自情节提要的约束。我错过了任何步骤吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多