3

视图中有两个标签。我的设计师将为我提供以下射手

在此处输入图像描述

但是,我只能在 Xcode 中设置约束,如下所示

在此处输入图像描述

我的意思是,设计师需要我将两个标签与基线对齐,但是,我可以用框架设置两个标签的空间。有没有办法使用自动布局设置两个标签的空间与基线而不是标签的框架?

4

2 回答 2

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低于汉字的实际高度,

于 2013-10-22T06:33:02.133 回答
1

您的设计师希望您使用基线和 x 高度,请参阅http://en.wikipedia.org/wiki/Baseline_(typography)。x-height 的格式选项在 Auto Layout 中不可用(请参阅NSLayoutFormatOptions),所以我认为这是不可能的。

于 2013-10-18T12:07:23.507 回答