簡體   English   中英

iOS中心UITableViewCell標簽帶有披露指示器

[英]iOS Centring UITableViewCell label with disclosure indicator

我正在尋找一種在表格單元格中輸入標簽的方法,該表格單元格也有一個披露指標。 我現在遇到的問題是,在計算標簽的位置時似乎忽略了披露指標

下圖是:

圖片

因此,您可以看到標簽位於單元格左側和指示器左側之間的區域中,如果它位於單元格的中心,則它將位於導航欄標題下方。

感謝任何幫助謝謝

從故事板中

在此輸入圖像描述

好的,先解釋一下你的問題。 它與UITableViewCell解剖結構有關。 隨着解剖學 ,我說的是事實UITableViewCell對你來說只是另一個容器中 ,這是一個容器 contentView (你也可以看到這一個在你的故事板)。

當您在Storyboard中操作時,您只能在contentView上操作,而不是在實際的UITableViewCell 因此,當您使用AutoLayoutUILabel設置為以X軸為中心時, AutoLayout將始終嘗試將其置於contentView ,而不是外部容器(即UITableViewCell )中。 然后,當您向UITableViewCell添加公開指示符時contentView自動縮小其寬度,因為該單元格為公開指示符騰出空間,並且希望阻止您在為披露指示符保留的右側區域中添加UI元素。

現在,你有幾個選擇:

  1. 您可以直接編輯約束並為其添加一個常量(當您刪除指標時,該常量必須與標簽移動的值相同)

在此輸入圖像描述

  1. 不要使用默認的披露指示器(即不勾選故事板中的復選框),只需添加一個看起來相同的UIImageView圖像。

要不綁定任何常量,您可以計算framecontentView.frame寬度差異。 所以首先創建一個這樣的插座集合:

@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *centerConstraintsToOffset;

然后將要在單元格中水平居中的中心約束添加到該出口集合:

在此輸入圖像描述

最后將此代碼添加到您的單元格:

override func layoutSubviews() {
    super.layoutSubviews()
    for constraint in centerConstraintsToOffset {
        constraint.constant = (frame.size.width - contentView.frame.size.width) / 2.0
    }
}

這也使您可以隨時隨地添加或移除單元配件,並且您的視圖將始終完全對齊。 即使您完全取下配件。

帕維爾的答案為我解決了這個問題。 在他的答案演示后創建IBOutlet集合之后,這是他為Swift 3編輯的代碼示例:

override func layoutSubviews() {
    super.layoutSubviews()
    for constraint: NSLayoutConstraint in self.centerConstraintsToOffset {
        constraint.constant = (frame.size.width - contentView.frame.size.width) / 2.0
    }

}

正如您已經注意到的那樣,添加“UITableViewCellAccessoryDisclosureIndicator”將縮小為單元格的contentView分配的空間。 另一個不需要自定義指示符或猜測偏移量的解決方案是以編程方式將UILabel添加到單元格的根視圖,而不是contentView。 例如:

@property UILabel *label;

// ...

- (void)layoutSubviews
{
    [super layoutSubviews];

    [self.label removeFromSuperview];
    self.label = [[UILabel alloc] init];
    self.label.text = @"Motorsport";
    [self.label sizeToFit];
    label.center = CGPointMake(self.center.x, self.size.height/2);
    [self addSubview:self.label];
}

暫無
暫無

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

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