iOS 8.0, hücreler VE tablo görünümlerinde layoutMargins özelliğini sunar.
Bu özellik iOS 7.0'da mevcut olmadığından, atamadan önce kontrol ettiğinizden emin olmanız gerekir!
Kolay düzeltme, hücrenizi alt sınıflara ayırmak ve @ user3570727 tarafından önerildiği gibi düzen kenar boşluklarını geçersiz kılmaktır. Ancak, aşağıdaki çözümü önermediğim için Güvenli Alandan kenar boşluklarını devralma gibi sistem davranışlarını kaybedersiniz:
(ObjectiveC)
-(UIEdgeInsets)layoutMargins {
return UIEdgeInsetsZero // override any margins inc. safe area
}
(hızlı 4.2):
override var layoutMargins: UIEdgeInsets { get { return .zero } set { } }
Özelliği geçersiz kılmak istemiyorsanız veya koşullu olarak ayarlamanız gerekiyorsa, okumaya devam edin.
Özelliğe ek olarak layoutMargins
Apple, hücrenize Tablo Görünümü'nün kenar boşluğu ayarlarını devralmasını önleyecek bir özellik ekledi . Bu özellik ayarlandığında, hücrelerinizin tablo görünümünden bağımsız olarak kendi kenar boşluklarını yapılandırmasına izin verilir. Bunu bir geçersiz kılma olarak düşünün.
Bu özellik çağrılır preservesSuperviewLayoutMargins
ve NO
hücrenin layoutMargin
ayarının layoutMargin
TableView'da ayarlanan her şeyi geçersiz kılmasına izin verir . Hem zaman kazandırır ( Tablo Görünümünün ayarlarını değiştirmeniz gerekmez ), hem de daha özlüdür. Ayrıntılı bir açıklama için lütfen Mike Abdullah'ın cevabına bakınız.
NOT: Aşağıda, Mike Abdullah'ın cevabında ifade edildiği gibi, hücre düzeyinde bir marj ayarı için temiz bir uygulama yer almaktadır . Hücrenizin ayarlanması, preservesSuperviewLayoutMargins=NO
Tablo Görünümünüzün hücre ayarlarını geçersiz kılmamasını sağlar. Tüm tablo görünümünüzün tutarlı kenar boşluklarına sahip olmasını istiyorsanız, lütfen kodunuzu buna göre ayarlayın.
Hücre kenar boşluklarınızı ayarlayın:
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
// Remove seperator inset
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
// Prevent the cell from inheriting the Table View's margin settings
if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
[cell setPreservesSuperviewLayoutMargins:NO];
}
// Explictly set your cell's layout margins
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
Hızlı 4:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
// Remove seperator inset
if cell.responds(to: #selector(setter: UITableViewCell.separatorInset)) {
cell.separatorInset = .zero
}
// Prevent the cell from inheriting the Table View's margin settings
if cell.responds(to: #selector(setter: UITableViewCell.preservesSuperviewLayoutMargins)) {
cell.preservesSuperviewLayoutMargins = false
}
// Explictly set your cell's layout margins
if cell.responds(to: #selector(setter: UITableViewCell.layoutMargins)) {
cell.layoutMargins = .zero
}
}
Ayar preservesSuperviewLayoutMargins
NO hücrenden mülk gerektiğini cep marjlarını geçersiz adresinin tablo görünümüne engeller. Bazı durumlarda, düzgün çalışmıyor gibi görünüyor.
Hepsi başarısız olursa, Tablo Görünümü kenar boşluklarınızı kaba kuvvet uygulayabilirsiniz:
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
// Force your tableview margins (this may be a bad idea)
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
}
}
Hızlı 4:
func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
// Force your tableview margins (this may be a bad idea)
if tableView.responds(to: #selector(setter: UITableView.separatorInset)) {
tableView.separatorInset = .zero
}
if tableView.responds(to: #selector(setter: UITableView.layoutMargins)) {
tableView.layoutMargins = .zero
}
}
... ve işte gidiyorsunuz! Bu iOS 7 ve 8'de çalışmalıdır.
DÜZENLEME: Mohamed Saleh dikkatimi iOS 9. değişiklik olabileceğini getirdi Sen Tablo Görünümü adlı ayarlamak gerekebilir cellLayoutMarginsFollowReadableWidth
için NO
size-parçalar veya kenar boşluklarını özelleştirmek isterseniz. Kilometreniz değişebilir, bu çok iyi belgelenmemiştir.
Bu özellik yalnızca iOS 9'da bulunmaktadır, bu yüzden ayarlamadan önce kontrol ettiğinizden emin olun.
if([myTableView respondsToSelector:@selector(setCellLayoutMarginsFollowReadableWidth:)])
{
myTableView.cellLayoutMarginsFollowReadableWidth = NO;
}
Hızlı 4:
if myTableView.responds(to: #selector(setter: self.cellLayoutMarginsFollowReadableWidth)) {
myTableView.cellLayoutMarginsFollowReadableWidth = false
}
( iOS 8 UITableView ayırıcı iç metin 0'dan yukarıdaki kod çalışmıyor )
EDIT: İşte saf bir Arayüz Oluşturucu yaklaşım:
NOT: iOS 11 bu davranışın çoğunu değiştirir ve basitleştirir, bir güncelleme gelecek ...