У меня возникла проблема с появлением UITableViewCell на iPad. Эта проблема возникла где-то между iOS 7 и теперь, но я не знаю точно, когда она началась. На iPod или iPhone мои камеры выглядят прекрасно (портретный или альбомный), но на iPad, аксессуар раскрытия очень широк. Вы можете увидеть пример на изображении ниже. Столбец имеет зеленую рамку, а контентное изображение имеет коричневую границу. Представление контента намного меньше, чем должно быть. Ячейки таблицы без аксессуара для описания выглядят прекрасно.
Я использую Xamarin, и я полностью создаю этот интерфейс в коде. Вот код (я пропустил код, излагающий внутри ячеек ContentView, поскольку он не имеет значения:
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;
}
Я попытался изменить размер ContentView, переопределив метод LayoutSubviews ячейки. Тем не менее, ContentView был теперь столь же широким, как и таблица, но аксессуар раскрытия не изменился и теперь находился ниже ContentView.
public override void LayoutSubviews()
{
base.LayoutSubviews();
//ContentView.Frame = new CGRect(0, 0, Frame.Size.Width, ContentView.Frame.Size.Height);
}
Опять же, это не проблема на iPhone или iPod. Я не понимаю, что я должен делать, чтобы iPad правильно работал.
Спасибо. Зак Грин
Изменить - 10/21/2015 11:00 На данный момент я сделал очень хакерское изменение, которое исправляет проблему для меня, но я знаю, что будущие обновления iOS, вероятно, нарушат это, поэтому я предпочел бы более одобренный 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);
}
}
}