UILabel高度在viewDidLoad或viewWillAppear中不会更改

时间:2014-01-12 11:27:24

标签: ios objective-c

我在viewWillAppear中调用了函数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后的示例:

enter image description here

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

enter image description here

然后我再次轮换成肖像:

enter image description here

标签设置为:

enter image description here

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以使用viewDidLayoutSubview:

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

编辑:

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

另外,我将UILabel的行数设置为0,并将换行设置为自动换行。

Constraints

First Second Third

答案 2 :(得分:1)

删除所有代码并使用以下内容:

-(void)viewWillLayoutSubviews{
    [super viewWillLayoutSubviews];

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

如果您需要在布局期间执行任何与方向相关的操作,可以查看self.interfaceOrientation

答案 3 :(得分:-1)

哦是啊.....终于我得到了修理宝贝。 您只需点击标签并选择编辑器 - > Pin - >超级视图的底部空间和瞧!我找到了这个解决方案,同时和我的女孩在她的公寓里洗澡。

希望这个答案可以帮助那些面临同样问题的人。

干杯, Mark Thien