Ios UILabel高度在viewDidLoad或VIEWWILL中不更改

Ios UILabel高度在viewDidLoad或VIEWWILL中不更改,ios,objective-c,Ios,Objective C,我在视图中调用了函数changeQuestionLabelHeight,它将出现,但高度不会改变。但是,在运行过程中,它在纵向位置时会发生变化,正如您可以看到的代码一样 下面是我的代码 - (void)viewDidLoad { [super viewDidLoad]; [self changeQuestionLabelHeight]; self.labelQuestion.adjustsFontSizeToFitWidth = YES; CGFloat fo

我在
视图中调用了函数changeQuestionLabelHeight,它将出现
,但高度不会改变。但是,在运行过程中,它在纵向位置时会发生变化,正如您可以看到的代码一样

下面是我的代码

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self changeQuestionLabelHeight];

    self.labelQuestion.adjustsFontSizeToFitWidth = YES;
    CGFloat fontSize = self.labelQuestion.font.pointSize;
    self.labelQuestion.minimumScaleFactor = 8.0/fontSize;
    self.labelQuestion.numberOfLines = 0;

    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(deviceOrientationDidChangeNotification:)
     name:UIDeviceOrientationDidChangeNotification
     object:nil];

}

- (void)deviceOrientationDidChangeNotification:(NSNotification*)note
{

    [self changeQuestionLabelHeight];

}

- (void) changeQuestionLabelHeight{

    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];

    CGRect newFrame = self.labelQuestion.frame;

    switch (orientation)
    {
        case UIDeviceOrientationPortrait:
            newFrame.size.height = self.labelQuestion.frame.size.height + 250;
            self.labelQuestion.frame = newFrame;
            break;
        case UIDeviceOrientationPortraitUpsideDown:
            newFrame.size.height = self.labelQuestion.frame.size.height + 250;
            self.labelQuestion.frame = newFrame;
            break;
        default:
            break;
    }
}
加载viewController后的示例:

加载后,我将iPad旋转到横向:

然后我再次旋转到肖像:

标签设置为:


我最近遇到了同样的问题。尝试调用
视图中的任何标签高度更改。其他所有生命周期方法似乎调用得太早。

您可以使用
viewdilayoutsubview:

每次旋转设备时都会调用它

编辑:

我建议你查一下NSLayoutConstraints。 这就是我使用的约束条件。(由xcode自动生成) 注意:我没有花时间去修理按钮。他们有点搞砸了

另外,我将UILabel的行数设置为0,换行符设置为word wrap


删除所有这些代码,并使用类似以下内容:

-(void)viewWillLayoutSubviews{
    [super viewWillLayoutSubviews];

    CGRect newFrame = self.labelQuestion.frame;
    newFrame.size.height = 250;
    self.labelQuestion.frame = newFrame;
}

如果您需要在布局期间执行任何特定于方向的操作,您可以检查
self.interface-orientation

哦,是的。。。。。最后我把它修好了,宝贝。 您只需单击标签,然后选择编辑器->锁定->底部空间到Superview,瞧!!我在和我女儿在公寓洗澡时想出了这个解决办法

希望这个答案能帮助面临同样问题的人

干杯,
Mark Thien

标签的框架第一次设置在哪里?标签的框架始终位于顶部,因为您可以看到第一张图片,但它的高度较低,这就是为什么我想在其上再添加250个,以填充未使用的空间。一旦它填满了未使用的空间,它将看起来像上面的第三张图片。我改为换行,部分文字(“今天很棒”)消失了。你是否也将行数改为0?