gpt4 book ai didi

ios - UITableViewSource 单元格高度始终为 44 点

转载 作者:行者123 更新时间:2023-12-01 19:12:13 26 4
gpt4 key购买 nike

我正在为来自 UITableViewSource 的 UITableView 编写一个自定义单元格。我已经实现了 GetHeightForRow 并记录了结果以确保高度正确通过。问题是,我的自定义单元格的框架高度是固定的 44,无论从 GetHeightForRow 返回什么值。副作用当然是我的图层边界不正常,并且 UITableView 切断了我最后一个单元格的底部,并且不允许进一步滚动。

值得一提的是,我尝试在我的单元构造函数逻辑和 GetCell 逻辑中手动更改单元的框架,但对大多数人来说很明显,这并不重要,使用的值总是恢复为 44。

这是我的 UITableViewSource 逻辑如何进行的一个想法:

public override float GetHeightForRow (UITableView tableView, NSIndexPath indexPath)
{
var result = SingleItemCell.GetHeight(_models[indexPath.Row], _width, _isStandalone));
Console.WriteLine(result); //prints various heights, never 44
return result;
}

public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)
{
var cell = tableView.DequeueReusableCell(Id) as SingleItemCell ??
(_isStandalone ? new StandaloneItemCell() : new SingleItemCell());

var model = _models[indexPath.Row];
cell.Model = model;

Console.WriteLine(cell.Frame.Height); //always 44

return cell;
}

更新

有趣的是,单元格分隔符显示在正确的位置,但我的自定义 View 仍然无法看到正确的帧高度。

即使在更改了我的自定义单元格 View 的构造函数以将显式框架传递给基本构造函数之后,我的框架的高度也不会改变。
public SingleOffer(RectangleF frame) 
: base(frame) //example new RectangleF(0, 0, 300, 65)
{
//Here, before custom logic, Frame is still 0, 0, 300, 44!
Initialize();
}

最佳答案

我无法重现您的问题。如您所见,关键是UITableViewSource.GetHeightForRow .以下程序创建预期的输出:

enter image description here

using System;
using System.Collections.Generic;
using System.Linq;

using MonoTouch.Foundation;
using MonoTouch.UIKit;

namespace SingleFileTableViewSolution
{
public class DomainClass
{
static Random rand = new Random (0);
public UIColor Color { get; protected set; }
public float Height { get; protected set; }

static UIColor[] Colors = new UIColor[]
{
UIColor.Red,
UIColor.Green,
UIColor.Blue,
UIColor.Yellow
};

public DomainClass ()
{
Color = Colors[rand.Next(Colors.Length)];
switch(rand.Next(3))
{
case 0 :
Height = 24.0f;
break;
case 1 :
Height = 44.0f;
break;
case 2 :
Height = 64.0f;
break;
default:
throw new ArgumentOutOfRangeException();
}
}
}

//Table Source
public class ColorTableDataSource : UITableViewSource
{
List<DomainClass> Model { get; set; }

public ColorTableDataSource(List<DomainClass> model)
{
this.Model = model;
}

public override int RowsInSection(UITableView tableView, int section)
{
return Model.Count;
}

public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
var cell = tableView.DequeueReusableCell(ColoredTableCell.ID);
if(cell == null)
{
cell = new ColoredTableCell();
}
cell.ContentView.BackgroundColor = Model[indexPath.Row].Color;

return cell;
}

public override float GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
{

var height = Model[indexPath.Row].Height;
return height;
}
}

public class ColoredTableCell : UITableViewCell
{
public static readonly string ID = "ColoredTableCell";

public ColoredTableCell ()
{
}
}

public class ColorTableController : UITableViewController
{
String title;

public ColorTableController (String title, UITableViewSource source) : base ()
{
this.title = title;
this.TableView.Source = source;
}

public override void ViewDidLoad ()
{
base.ViewDidLoad ();

Title = title;
}
}

[Register ("AppDelegate")]
public class AppDelegate : UIApplicationDelegate
{
UIWindow window;
ColorTableController viewController;

public override bool FinishedLaunching (UIApplication app, NSDictionary options)
{
var models = new List<DomainClass>();
for(int i = 0; i < 20; i++)
{
models.Add(new DomainClass());
}

var tableController = new ColorTableController("My Table", new ColorTableDataSource(models));

window = new UIWindow (UIScreen.MainScreen.Bounds);
window.RootViewController = tableController;

window.MakeKeyAndVisible ();

return true;
}


}

public class Application
{
static void Main (string[] args)
{
UIApplication.Main (args, null, "AppDelegate");
}
}
}

关于ios - UITableViewSource 单元格高度始终为 44 点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15749301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com