2 つの UILabels と中央に配置され、下部に積み重ねられた UIButton を持つビュー コントローラーがあります。UILabels の外側の端とビューの境界の間には 20 ピクセルがあり、各コントロールの間には 10 ピクセルがあります。
デバイスを横向きに回転させても、ラベルは中央に配置され、パディングと間隔は一定のままですが、ラベルの高さは変わりません。以前にラベルに 3 行を含めることができた場合でも、高さは 3 行のままです。テキストは新しい向きで 2 行だけです
スタック オーバーフローで、ラベルの高さを見つけて変更する方法に関する同様の質問を見たことがありますが、これらはラベルの左上隅を、ラベルがまだ大きい場合の位置に残しているようです。これは、2 つのラベルの間に 10 ピクセルしかなければならないという具体的な制約にもかかわらずです。これは、私が見つけた解決策がフレームの高さを変更したためだと思いますが、これにより、原点も同じままになります。
高さの計算と新しい正しい幅の設定に加えて、ラベルの新しい原点を計算するためのコードをさらに追加できますが、かなり一般的でなければならないものについては、もっと簡単な方法が必要です。
ラベルを制約に従い、設定された原点を無視する方法はありますか? または、テキストに合わせてラベルのサイズと位置を適切に変更しますか?
現在使用しているコードは次のとおりです。
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
CGSize maximumLabelSize = CGSizeMake(self.view.frame.size.width - 40, CGFLOAT_MAX);
CGSize expectedLabelSize = [helpMessageText sizeWithFont:[helpMessageLabel font] constrainedToSize:maximumLabelSize lineBreakMode:[helpMessageLabel lineBreakMode]];
CGRect newFrame = helpMessageLabel.frame;
newFrame.size.height = expectedLabelSize.height;
[helpMessageLabel setText:helpMessageText];
[helpMessageLabel setFrame:newFrame];
NSLog(@"%f", newFrame.size.height);
[helpMessageLabel setBackgroundColor:[UIColor blueColor]];
expectedLabelSize = [errorMessageText sizeWithFont:[errorMessageLabel font] constrainedToSize:maximumLabelSize lineBreakMode:[errorMessageLabel lineBreakMode]];
newFrame = errorMessageLabel.frame;
newFrame.size.height = expectedLabelSize.height;
[errorMessageLabel setText:errorMessageText];
errorMessageLabel.frame = newFrame;
NSLog(@"%f", newFrame.size.height);
[errorMessageLabel setBackgroundColor:[UIColor greenColor]];
}
特別なコードがない場合、アプリは次のようになります。
上記のコードを横向きにすると、アプリは次のようになります。
これが私が望むものに近いものです: