![](/img/trans.png)
[英]iOS UITableViewCell accessory not showing correctly except Disclosure Indicator
[英]iOS Centring UITableViewCell label with disclosure indicator
我正在尋找一種在表格單元格中輸入標簽的方法,該表格單元格也有一個披露指標。 我現在遇到的問題是,在計算標簽的位置時似乎忽略了披露指標
下圖是:
因此,您可以看到標簽位於單元格左側和指示器左側之間的區域中,如果它位於單元格的中心,則它將位於導航欄標題下方。
感謝任何幫助謝謝
從故事板中
好的,先解釋一下你的問題。 它與UITableViewCell
的解剖結構有關。 隨着解剖學 ,我說的是事實UITableViewCell
對你來說只是另一個容器中 ,這是一個容器 contentView
(你也可以看到這一個在你的故事板)。
當您在Storyboard中操作時,您只能在contentView
上操作,而不是在實際的UITableViewCell
。 因此,當您使用AutoLayout將UILabel
設置為以X軸為中心時, AutoLayout將始終嘗試將其置於contentView
,而不是外部容器(即UITableViewCell
)中。 然后,當您向UITableViewCell
添加公開指示符時 , contentView
自動縮小其寬度,因為該單元格為公開指示符騰出空間,並且希望阻止您在為披露指示符保留的右側區域中添加UI元素。
現在,你有幾個選擇:
UIImageView
圖像。 要不綁定任何常量,您可以計算frame
和contentView.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.