无法以编程方式调整UILabel宽度

时间:2015-02-12 18:26:23

标签: ios objective-c iphone interface-builder uilabel

我一直在关注以下几个Q / A:例如thisthis other一个。

然而我无法更改UILabel的宽度

这是我的代码:

- (void)configureView {
    // Update the user interface for the detail item.
    if (self.detailItem) {
        Data *detailData = (Data*)self.detailItem;

        NSString * priceString = [NSString stringWithFormat:@"%@ %.2f", detailData.priceCurrency, detailData.priceAmount.floatValue ];
        CGSize size = [priceString sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:17.0f]}];
        CGSize adjustedSize = CGSizeMake(ceilf(size.width), ceilf(size.height));
        _price.frame = CGRectMake(_price.frame.origin.x, _price.frame.origin.y, 300, adjustedSize.height);

        // I Tried this one as well..
        //_price.frame = CGRectMake(_price.frame.origin.x, _price.frame.origin.y, adjustedSize.width, adjustedSize.height);
        _price.text = priceString;

        // and this one 
        // [_price sizeToFit];

        // And this one
        [_price setFrame:CGRectMake(_price.frame.origin.x,_price.frame.origin.y,adjustedSize.width,adjustedSize.height)];
        [_price setText:priceString];

        // as well as hardocding the width to 300
        // [_price setFrame:CGRectMake(_price.frame.origin.x,_price.frame.origin.y,300,adjustedSize.height)];
    }
}

不幸的是,以上都没有改变宽度UILabel。

这是我在界面构建器中设置的方式,这里有什么问题吗? 原始宽度为40 所以通过将其硬编码为300我希望它能够改变。

enter image description here

视图是 DetailView ,当用户点击cel时,可以从MasterViewController访问该视图。这是我用来调用上面描述的configureView方法的DetailViewController上的代码。

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self configureView];
}

对于我可能遗失的内容有任何想法?

这是我初始化我的网点的方式:

// DetailViewController.m 
@interface DetailViewController ()

@end

@implementation DetailViewController
@synthesize price = _price;

好处是文本内容在那里,所以出口参考不是零。

然而,这就是UILabel的出现方式:

enter image description here

编辑:

我试图删除约束但似乎仍然无效。

这是现在的代码:

   _price.frame = CGRectMake(_price.frame.origin.x, _price.frame.origin.y, 300, 200);
        _price.text = @"bdadadsdsdsdsDsds";

enter image description here

1 个答案:

答案 0 :(得分:0)

viewDidLayoutSubviews是在UI实际出现在屏幕上之前修改用户界面的最佳位置。尝试将代码移至viewDidLayoutSubviews

希望这有帮助