Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 顶部对齐的UILabel,使文本粘贴到标签视图的顶部-ios_Iphone_Objective C_Ios_Xcode - Fatal编程技术网

Iphone 顶部对齐的UILabel,使文本粘贴到标签视图的顶部-ios

Iphone 顶部对齐的UILabel,使文本粘贴到标签视图的顶部-ios,iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,是否有一种方法可以“顶部对齐”UILabel,即使文本粘贴到标签视图的顶部?与垂直居中对齐或在视图中心浮动(默认设置)相反 这是三个标签的图像,左对齐、右对齐和居中对齐,以及一个UITextView(居中对齐和顶部对齐)。无论视图的垂直大小如何,textView的文本都会固定在顶部。我可以用标签做同样的事情吗 在iOS中,默认情况下无法设置UILabel的垂直对齐方式。相反,您需要使用由NSString提供的sizeWithFont方法之一。您使用哪种标签取决于您想要的是多行标签还是单行标签si

是否有一种方法可以“顶部对齐”UILabel,即使文本粘贴到标签视图的顶部?与垂直居中对齐或在视图中心浮动(默认设置)相反

这是三个标签的图像,左对齐、右对齐和居中对齐,以及一个UITextView(居中对齐和顶部对齐)。无论视图的垂直大小如何,textView的文本都会固定在顶部。我可以用标签做同样的事情吗


在iOS中,默认情况下无法设置
UILabel
的垂直对齐方式。相反,您需要使用由
NSString
提供的
sizeWithFont
方法之一。您使用哪种标签取决于您想要的是多行标签还是单行标签
sizeWithFont:forWidth:lineBreakMode:
可用于单行标签,而
sizeWithFont:constrainedToSize:lineBreakMode:
可用于多行标签。您可以使用相关标签的
font
属性轻松加载font参数。您可以查看有关使用这些函数的更多详细信息


这些方法将根据
NSString
中的文本返回标签最小大小的
CGSize
结构。标签尺寸正确后,您可以轻松地将其放置在superview的顶部,并显示为顶部对齐。

我在对我的问题的评论中使用了上面链接的答案:

我使用的代码如下:

- (void)setUILabelTextWithVerticalAlignTop:(NSString *)theText {
    CGSize labelSize = CGSizeMake(250, 300);
    CGSize theStringSize = [theText sizeWithFont:targetLabel.font constrainedToSize:labelSize lineBreakMode:targetLabel.lineBreakMode];
    targetLabel.frame = CGRectMake(targetLabel.frame.origin.x, targetLabel.frame.origin.y, theStringSize.width, theStringSize.height);
    targetLabel.text = theText;
}

//linked to a button that sets the text from a UITextView to the label.
- (IBAction)setText:(id)sender {

    [sourceText resignFirstResponder];
    [self setUILabelTextWithVerticalAlignTop:sourceText.text];
    [targetLabel setNumberOfLines:0];
    [targetLabel sizeToFit];

}
以下是项目:


我已将UILabel替换为UITextView,因为在UITextView中,文本粘在顶部


只是一个建议,可能对某人有用

有一个解决方法:


  • 使用常量将高度和宽度
    约束设置为
    UILabel
    ,使其成为UILabel的子类

    .h文件

    @property (nonatomic, assign) UIControlContentVerticalAlignment verticalAlignment;
    
    .m文件

    - (void) drawTextInRect:(CGRect)rect 
    {
        if(_verticalAlignment == UIControlContentVerticalAlignmentTop ||  _verticalAlignment == UIControlContentVerticalAlignmentBottom)    
        {
             // If one line, we can just use the lineHeight, faster than querying sizeThatFits
             const CGFloat height = floorf(((self.numberOfLines == 1) ? ceilf(self.font.lineHeight) : [self sizeThatFits:self.frame.size].height));
              rect.origin.y = floorf(((self.frame.size.height - height) / 2.0f) * ((_verticalAlignment == UIControlContentVerticalAlignmentTop) ? -1.0f : 1.0f));
        }
        [super drawTextInRect:rect];
    }
    
    
    - (void) setVerticalAlignment:(UIControlContentVerticalAlignment)newVerticalAlignment
    {
         _verticalAlignment = newVerticalAlignment;
         [self setNeedsDisplay];
    }
    

    我用这个垂直对齐

    对于标签高度不需要恒定的情况,有一个简单的解决方案:将
    标签
    放在
    堆栈视图
    中。确保将前导和尾随常量添加到
    堆栈视图
    。 以下是如何在故事板中执行此操作的屏幕截图:


    我在应用程序中所做的是将UILabel的line属性设置为0,并创建
    UILabel
    的底部约束,并确保将其设置为>=0,如下图所示


    对于一个类似的问题,我给出了一个答案:这个链接是为我做的。谢谢尼万王!任何与我有相同问题的人都可以访问上面的链接,或者查看下面我的答案,我想你会找到解决方案。快速技巧。。。simply sizeToFit您也可以在标签上调用sizeToFit以将框架设置为其内容。对我很有用:)如何使其多行?我似乎找不到允许这样做的选项:/是的,它可以工作,但请告诉我如何更改它的字体大小。我的TextView位于自定义单元格上。同时将高度约束设置为>=无论原始高度是多少,都将允许标签增长并与容器中的文本保持在左上角。使用
    UICollectionViewCell
    运行此操作。常规尺码的衣服不起作用。您的自动布局建议在此实例中有效。谢谢感谢你的帖子,对于那些想知道的人来说,它就像iOS 11上的一个符咒:)确保你使用了你所说的第一步和第三步是什么意思?为我更新iOS 11代码:
    UILabel*iconLabel=[UILabel.alloc initWithFrame:CGRectMake(0,0,size,size)];[iconLabel setTextColor:[UIColor whiteColor]];[iconLabel setTextAlignment:NSTextAlignmentCenter];CGSize labelSize=iconLabel.frame.size;iconLabel.frame=[图标边界矩形尺寸:标签尺寸选项:NSStringDrawingUserLineFragmentOrigin属性:nil上下文:nil];[iconLabel setText:icon];[iconLabel setNumberOfLines:1];[iconLabel sizeToFit];返回iconLabel