视野中有两个标签。我的设计师将为我提供以下
但是,我只能在Xcode中设置约束,如下面的
我的意思是,设计师需要我将两个标签与基线对齐,但是,我可以用框架设置两个标签的空间。有没有办法使用Autolayout设置两个标签的空间而不是标签的框架?
答案 0 :(得分: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低于汉字的实际高度,
答案 1 :(得分:1)
您的设计师希望您使用基线和x高度,请参阅http://en.wikipedia.org/wiki/Baseline_(typography)。自动布局中没有x高度的格式选项(请参阅NSLayoutFormatOptions),所以我认为不可能。