簡體   English   中英

是否可以將標簽內的文本與“大”框架垂直對齊

[英]Is it possible to vertically align text inside labels with a “large” frame

在我的應用程序中,我有多個帶有自定義單元格的表格視圖。 單元格中的一些文本分布在 2-4 行之間,因此 label 的高度足以容納內容。

但是在 iPad 上,屏幕更大,我希望文本出現在 label 的左上角,而不是像使用numberOfLines屬性時那樣出現在中間。 我知道您可以水平對齊文本,但也必須可以將文本與左上角對齊? 或者是不可能的。

截屏:

在此處輸入圖像描述

不可能垂直對齊UILabel中的文本。 但是,您可以使用NSStringsizeWithFont:方法動態更改 label 的高度,並根據需要設置其xy

作為替代方案,您可以使用UITextField 它支持contentVerticalAlignment操作,因為它是UIControl的子類。 您必須將其userInteractionEnabled設置為NO以防止用戶在其上鍵入文本。

sizeToFitUITableCellView中不起作用,因為單元格在滾動期間被重用。

解決方法是根據字體和字號計算表格單元格高度,並將label高度調整為它。

因為很難在 web 上找到解決方案,所以我寫了一篇關於它的 短文

你可以這樣做

  1. 從 IB 設置標簽的numberOfLines屬性 0

  2. 將標簽的lineBreakMode設置為UILineBreakModeWordWrap非常非常重要

現在無論你在 label 上設置什么,只需 append 幾個 @"\n" 到它......例如-

[yourTextLabel setText:@"myLabel\n\n\n\n\n"];

在 iOS 7 sizeWithFont:現在已棄用! 必須調整諸如子類UILabel之類的幾種解決方案。

我的頂部對齊 label 文本的解決方案:在子類TopVerticalAlignmentLabel: UILabel覆蓋drawRect:如下:

- (void)drawRect:(CGRect)rect
{
    CGRect labelStringRect = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, CGFLOAT_MAX)
                                                     options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
                                                  attributes:@{ NSFontAttributeName: self.font, /* further attributes */}
                                                     context:nil];

    [super drawTextInRect:CGRectMake(0, 0, self.frame.size.width, labelStringRect.size.height)];
}

我實際上注意到使用

[Blue setSizeToFit]

確實與頂部垂直對齊。 默認居中。

我在viewDidLoad中添加

self.textLabel.numberOfLines = 0;
[self.textLabel sizeToFit];

確保您的約束設置正確,以便允許 label 收縮或增長。 否則它將無法正常工作。

這是 SomeOne 提出的相同問題。 你會找到更合適的方法來解決這個問題。他們對此做了很好的解釋。

我想是的,你應該看看這個。

在該線程中,許多答案建議根據text為 UILabel 設置動態框架,如下所述的代碼片段。

    CGSize theStringSize = [textToBeUsed sizeWithFont:lblTitle.font  constrainedToSize:labelSize lineBreakMode:lblTitle.lineBreakMode];
    lblTitle.frame = CGRectMake(lblTitle.frame.origin.x, lblTitle.frame.origin.y, theStringSize.width, theStringSize.height);
    lblTitle.text = theText;

   // lblTitle is the Label used for showing the Text.

您可以獲得更精確的想法,而不是在這里使用textField

您可以簡單地使用 UITextView,並將其 UserInteraction Enabled 設置為 No,您的所有問題都將得到解決!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM