2014-09-24 22 views
13

iPhone 6 Plus'taki tablo görünümü hücre ayırıcılarımızla ilgili bir şey var. Özel bir hücreye sahip tek bir etiket ve ön kenar için 15pt'lik bir kısıtlama ile boş bir test projesi oluşturdum.iPhone 6 Plus ile ilgili bir sorun var. TableView.separatorInset

iPhone 5

Etiket ve ayırıcı ön kenardan 30 piksel (15pt) vardır. Her şey yolunda.

iPhone 5S

iPhone 6 artı

Etiket ön kenardan 48 piksel (15pt) ve ayırıcı ön kenardan 60 piksel (20pt) 'dir.

iPhone 6 Plus

i tableView.separatorInset log Eğer 6 Plus'ta iPhone 5S üzerinde 15pt ve 20pt bu. Ek parçayı 6 Plus'ta elle 15 olarak ayarlamak işe yaramıyor.

Lütfen yardım gönderin. Özel hücre sınıfınızda layoutMargins yöntemini geçersiz kıl.

+0

En son iOS 8.1.1 güncellemesinden sonra bile aynı sorunu yaşıyorum. Garip olan şey, bu sadece özel tarz tablo görünümü hücrelerinde gerçekleşir. – zgosalvez

+0

Bir iPad üzerinde bunu denedi ve aynı zamanda olur. – zgosalvez

+0

Herhangi bir çözüm bulundu? Aynı problemim var. – Sam

cevap

6

- (UIEdgeInsets)layoutMargins 
{ 
    return UIEdgeInsetsMake(0, 15, 0, 0); 
} 
+0

Sert kodlama numarası olmadan bunu yapmanın en iyi yolu nedir? – Sam

+0

Ayırıcıyı devre dışı bırakmak ve ayırıcı olarak özel bir görünüm eklemek daha iyi bir yoldur. – Vidyalaxmi

+0

Bunu yapmanın doğru yolu için, [bu gönderiyi] gözden geçirin (http://stackoverflow.com/questions/27420888/uitableviewcell-with-autolayout-left-margin-different-on-iphone-and-ipad).Bunun neden doğru olmasının nedeni, 6 Plus veya iPad gibi daha büyük bir cihazın büyük sol kenarına saygı duymasıdır. Apple marjı bir sebepten daha büyük olacak şekilde ayarladığından, daha iyi görünüyor ve uygulamalar buna saygı göstermeli. – yilin

1

Mükemmel bir çözüm değil, ama benim için çalıştı.

@IBOutlet weak var leftViewLeadingConstraint: NSLayoutConstraint! 

override func viewWillLayoutSubviews() { 
    super.viewWillLayoutSubviews() 
    switch UIScreen.mainScreen().scale { 
    case 2: 
     leftViewLeadingConstraint.constant = 7.0 
    case 3: 
     leftViewLeadingConstraint.constant = 11.0 
    default: 
     assertionFailure("Error: wrong scale value") 
    } 
} 
+0

Bu cevabın neden oy almadığını bilmiyorum. Benim için mükemmel çalıştı! Ölçek 3 ise, UITableViewCell alt sınıfımdaki layoutSubviews yönteminde ön kenar kısıtlamasını ayarlamıştım ve Storyboard'da, boyut sınıfının Düzenli olması durumunda 12 değerine (sanırım 11 yanlış) sahip olmak için ön kenar kısıtlamasını belirledim genişlik x Herhangi bir yükseklik. – Blip

1

ben bu çözümün sabit: viewDidLayoutSubviews aradığında http://qiita.com/mono0926/items/42f7a344b39e946abfe2

tableView.separatorInset.left değer elde edin.

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    notificationLabelLeft.constant = tableView.separatorInset.left 
} 
2

Eğer bir Storyboard kullanıyorsanız, Table View öznitelikleri denetçisini seçin. Custom

için

Ayırıcı INSET

değiştirme ve varsayılan 15 olarak marjı bıraktı bırakın.

+0

IOS 9 için bu çözüm benim için çalıştı. Ön kenarına 15pt sınırlaması olan bir etiket içeren özel bir hücre kullanıyordum. 15pt kısıtlaması iPhone 6+ & iPad hariç tüm iPhone'larda harika çalıştı (etiket, tablonun ayırıcı eki ile hizalanmadı). Bu çözüm sorunu çözdü. Teşekkürler! – xNightxOwl

+0

Ayrıca iOS 8'de de çalışır. Benim için en kolay çözüm. – Tuslareb

0

Sadece tablonun bu seçeneğinin yanlış olmasına dikkat edin ve özellikle iPad'de tüm aygıtlarda aynı şekilde çalışacaktır.

cellLayoutMarginsFollowReadableWidth = false