2 つのラベルが表示されます。私のデザイナーは、次のようなマークマンを提供してくれます
ただし、次のように Xcode でのみ制約を設定できます
つまり、デザイナーは 2 つのラベルをベースラインに揃える必要がありますが、2 つのラベルのスペースをフレームで設定できます。Autolayout を使用して、ラベルのフレームの代わりにベースラインで 2 つのラベルのスペースを設定する方法はありますか?
2 つのラベルが表示されます。私のデザイナーは、次のようなマークマンを提供してくれます
ただし、次のように Xcode でのみ制約を設定できます
つまり、デザイナーは 2 つのラベルをベースラインに揃える必要がありますが、2 つのラベルのスペースをフレームで設定できます。Autolayout を使用して、ラベルのフレームの代わりにベースラインで 2 つのラベルのスペースを設定する方法はありますか?
ありがとう@Arkadiusz、@Fogmeister、NSLayoutConstraint
それを行うためのカテゴリを実装しました。
@implementation NSLayoutConstraint (MarkmanSpace)
- (void)updateSpaceBetweenTopView:(UIView *)topView bottomView:(UIView *)bottomView {
UIFont *topViewFont = [self fontFromView:topView];
UIFont *bottomViewFont = [self fontFromView:bottomView];
if(topViewFont && bottomViewFont) {
CGFloat padding = fabs(topViewFont.descender) + fabs([self lowercaseGlyphTopBaselineHeightForFont:bottomViewFont]);
self.constant -= padding;
}
}
- (UIFont *)fontFromView:(UIView *)view {
UIFont *viewFont = nil;
if([view isKindOfClass:[UILabel class]]) {
viewFont = ((UILabel *)view).font;
}
return viewFont;
}
- (CGFloat)lowercaseGlyphTopBaselineHeightForFont:(UIFont *)font {
return font.ascender - font.xHeight;
}
@end
しかし、font.xHeight が漢字の実際の高さよりも低いという問題があります。