Mam problem z pojawieniem się mojego UITableViewCell na iPadzie. Ten problem pojawił się między systemem iOS 7 a teraz, ale nie wiem na pewno, kiedy to się zaczęło. Na iPodzie lub iPhonie moje komórki wyglądają dobrze (portret lub krajobraz), ale na iPadzie akcesoria do przechowywania są bardzo szerokie. Możesz zobaczyć przykład na obrazku poniżej. Tablecell ma zieloną granicę, a zawartość ma brązową obwódkę. Widok zawartości jest znacznie mniejszy niż powinien. Komórki tabeli bez elementu ujawniającego wyglądają dobrze.UITableViewCell Akcesoria są zbyt szerokie na iPadzie
Używam Xamarin i tworzę ten UI całkowicie w kodzie. Oto kod (I pominięto kod Układa wewnątrz komórek contentView ponieważ nie jest istotne.
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;
}
Próbowałem zmiany rozmiaru contentView nadrzędnymi komórki metodę LayoutSubviews jednak contentView był teraz tak szeroki, jak stół, ale akcesorium ujawnienie nie uległ zmianie i był teraz pod contentView.
public override void LayoutSubviews()
{
base.LayoutSubviews();
//ContentView.Frame = new CGRect(0, 0, Frame.Size.Width, ContentView.Frame.Size.Height);
}
Ponownie, to nie jest w ogóle problem na iPhone lub iPod. i don "Rozumiem, co powinienem zrobić, aby iPad działał prawidłowo."
Dzięki. Zach Zielona
Edit - 21.10.2015 11:00 Na razie zrobiłem bardzo hacky zmianę, która naprawia ten problem dla mnie, ale wiem, że przyszłe aktualizacje iOS będzie prawdopodobnie podzielenie , więc wolałbym, aby to zrobić, bardziej zatwierdzony przez iOS.
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);
}
}
}
Problem jesteś hardcoding rozmiar ramki: 'ramka = new CGRect (0, 0, 320, 42);' i ustawienie stałej szerokości. Podczas gdy iPhone ma szerokość ekranu 320 pikseli, iPad ma szerokość ekranu 768 pikseli, więc łamie to twój interfejs użytkownika – Lefteris
, więc powinienem po prostu pominąć tę linię? –
Po dokładniejszym przyjrzeniu się twojemu kodowi wydaje się, że nie ustawiasz właściwości Ramki lub ContentMode lub AutoresizingMask w dowolnym miejscu ... Dlaczego więc je inicjujesz? – Lefteris