Sto riscontrando un problema con l'aspetto di UITableViewCell sull'iPad. Questo problema è sorto tra iOS 7 e ora, ma non so per certo quando è iniziato. Su un iPod o iPhone le mie celle sembrano belle (ritratto o paesaggio), ma sull'iPad, l'accessorio di divulgazione è molto ampio. Puoi vedere un esempio nell'immagine qui sotto. Il tablecell ha un bordo verde e il contentview ha un bordo marrone. La visualizzazione del contenuto è molto più piccola di quanto dovrebbe essere. Le celle di tabella senza l'accessorio di divulgazione sembrano buone.L'accessorio UITableViewCell è troppo largo su iPad
Sto usando Xamarin, e sto creando completamente questa interfaccia utente in codice. Ecco il codice (ho omesso il codice che definisce l'interno delle cellule contentView poiché non è rilevante:.
protected void Draw()
{
Accessory = UITableViewCellAccessory.DisclosureIndicator;
Layer.BorderColor = UIColor.Green.CGColor;
Layer.BorderWidth = 1f;
Frame = new CGRect(0, 0, 320, 42);
ContentMode = UIViewContentMode.ScaleToFill;
AutoresizingMask = UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth;
ContentView.AutoresizingMask = UIViewAutoresizing.FlexibleWidth;
ContentView.MultipleTouchEnabled = true;
ContentView.ContentMode = UIViewContentMode.Center;
ContentView.ClipsToBounds = true;
ContentView.Layer.BorderColor = UIColor.Brown.CGColor;
ContentView.Layer.BorderWidth = 1f;
}
Ho provato a cambiare la dimensione del contentView sovrascrivendo il metodo layoutSubviews della cellula Tuttavia, la contentView ora era larga come il tavolo, ma l'accessorio divulgazione non è cambiata e ora era al di sotto della contentView.
public override void LayoutSubviews()
{
base.LayoutSubviews();
//ContentView.Frame = new CGRect(0, 0, Frame.Size.Width, ContentView.Frame.Size.Height);
}
Ancora una volta, questo non è affatto un problema su iPhone o iPod. I don Non capisco cosa dovrei fare diversamente affinché l'iPad funzioni correttamente
Grazie. Zach verde
Edit - 10/21/2015 11:00 Per il momento, ho fatto un cambiamento molto hacky che fissa il problema per me, ma so che i futuri aggiornamenti iOS probabilmente rompere questo , quindi preferirei un modo più approvato iOS per farlo.
public override void LayoutSubviews()
{
base.LayoutSubviews();
//!! - Hack for ipad layout issue with disclosure indicator
if (Accessory == UITableViewCellAccessory.DisclosureIndicator && UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad)
{
ContentView.Frame = new CGRect(0, 0, Frame.Size.Width - 32, ContentView.Frame.Size.Height);
foreach (var view in Subviews.OfType<UIButton>())
{
view.Frame = new CGRect(Frame.Size.Width - 24, view.Frame.Y, 8, view.Frame.Height);
}
}
}
Il problema è che si sta hardcoding le dimensioni della cornice: 'frame = new CGRect (0, 0, 320, 42);' e impostando una larghezza fissa. Mentre l'iPhone ha una larghezza dello schermo di 320 pixel, l'iPad ha una larghezza dello schermo di 768 pixel, quindi questa interrompe la tua interfaccia utente – Lefteris
quindi, dovrei semplicemente omettere quella linea? –
Dopo aver guardato più da vicino il codice, sembra che tu non stia impostando le proprietà Frame o ContentMode o AutoresizingMask ovunque ... Perché stai inizializzando allora? – Lefteris