- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我将 subview 添加到原型(prototype)表格单元格时,比方说 UITextView
,默认情况下没有左边距。我希望它使用与 iOS 内部用于内置标准单元格布局相同的边距。如果我遗漏了明显的东西,“使用设备/iOS 默认值”标志在哪里?否则,我的首选解决方案是查询设备的设备相关和 iOS 版本相关 UI 指标的方法。出于此问题的目的,我们可以将其限制为仅 UITableView
控件及其 UITableCell
后代的指标。
这就是我生成自定义单元格的方式:
internal class UITextSingleline : UITableViewCell
{
UILabel headingLabel;
UITextView textBox;
int MultiHeight;
public bool secure;
public UITextSingleline() : this(null, 1) { }
public UITextSingleline(int multiheight) : this(null, multiheight) { }
public UITextSingleline(NSString cellId, int multiheight) : base(UITableViewCellStyle.Default, cellId)
{
MultiHeight = multiheight;
SelectionStyle = UITableViewCellSelectionStyle.None;
headingLabel = new UILabel()
{
Font = UIFont.SystemFontOfSize(16),
TextColor = UIColor.DarkTextColor,
BackgroundColor = UIColor.Clear
};
textBox = new UITextView()
{
ClipsToBounds = true,
Font = UIFont.SystemFontOfSize(16),
TextColor = UIColor.DarkTextColor
};
if (multiheight == 1) textBox.TextContainer.MaximumNumberOfLines = 1;
textBox.Layer.CornerRadius = 10.0f;
textBox.Layer.BorderColor = UIColor.DarkTextColor.CGColor;
textBox.Layer.BorderWidth = 1f;
ContentView.AddSubviews(new UIView[] { headingLabel, textBox });
}
public override void LayoutSubviews()
{
base.LayoutSubviews();
headingLabel.Frame = new CGRect(16, 8, ContentView.Bounds.Width - 32, 20);
textBox.Frame = new CGRect(16, 32, ContentView.Bounds.Width - 32, 36 * MultiHeight); /* see? magic numbers all over the place */
}
public void UpdateCell(string caption, string text)
{
headingLabel.Text = caption;
textBox.Text = text;
}
public string Text
{
get
{
return textBox?.Text;
}
set
{
if (textBox != null) textBox.Text = value;
}
}
}
这就是它链接到包含 TableView 的方式:
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
switch (indexPath.Section)
{
case 0:
/* area/workplace */
switch (indexPath.Row)
{
case 0:
/* area picker (omitted) */
case 1:
/* workplace text input (single-line) */
if (txtWorkplace == null)
{
txtWorkplace = new UITextSingleline();
txtWorkplace.UpdateCell("Workplace", Data.Instance.Payload.report.workplace);
}
return txtWorkplace;
}
break;
case 1:
/* rest ommitted for brevity */
break;
}
return null;
}
我在 SO 和互联网上搜索了与 systemmetrics 等价的东西,有很多颜色和字体,但我只发现了很少的关于尺寸、边距、插图、圆角半径等的信息:
TableView
的 separatorInset
属性,它似乎适用于左缩进,但我对将布局的一部分应用到另一部分的度量有点怀疑部分。硬编码魔数(Magic Number)不是一种选择。我们在 iPhone 和 iPad 上进行了测试,发现即使在同一台设备上也有不同的 inset 默认值,只是 iOS 版本不同。我也会对 Objective-C 和 Swift 提示和解决方案感到满意,只要它们在正确翻译后在 xamarin 中工作即可。
最佳答案
如果你想根据不同的设备或不同的版本使用默认边距,为什么不试试自动布局呢? NSLayoutAttribute.LeadingMargin
表示元素边距的默认前沿。在您的 UITextSingleline
中,将 LayoutSubviews()
从硬代码修改为自动布局:
假设单元格只有一个标签来显示一些文本:
public override void LayoutSubviews()
{
base.LayoutSubviews();
var leadingConstraint = NSLayoutConstraint.Create(headingLabel, NSLayoutAttribute.Leading, NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.LeadingMargin, 1.0f, 0);
var topConstraint = NSLayoutConstraint.Create(headingLabel, NSLayoutAttribute.Top, NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.TopMargin, 1.0f, 0);
var trailingConstraint = NSLayoutConstraint.Create(headingLabel, NSLayoutAttribute.Trailing, NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.TrailingMargin, 1.0f, 0);
var bottomConstraint = NSLayoutConstraint.Create(headingLabel, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.BottomMargin, 1.0f, 0);
ContentView.AddConstraints(new NSLayoutConstraint[] { leadingConstraint, topConstraint, trailingConstraint, bottomConstraint });
}
这样,headingLabel
将具有与“标准内置单元格的 TextLabel”相同的布局。
而且在你的情况下,你似乎也想在你的单元格中添加一个 UITextView
。我建议你在构造函数时添加约束,我为你提供了我的约束,引用:
public MyTableViewCell (IntPtr handle) : base (handle)
{
headingLabel = new UILabel()
{
Font = UIFont.SystemFontOfSize(17),
TextColor = UIColor.DarkTextColor,
BackgroundColor = UIColor.Clear,
Lines = 0
};
textBox = new UITextView()
{
ClipsToBounds = true,
Font = UIFont.SystemFontOfSize(16),
TextColor = UIColor.DarkTextColor
};
ContentView.AddSubview(headingLabel);
ContentView.AddSubview(textBox);
// Disable this to enable autolayout
headingLabel.TranslatesAutoresizingMaskIntoConstraints = false;
textBox.TranslatesAutoresizingMaskIntoConstraints = false;
doLayouts();
}
void doLayouts()
{
var leadingConstraint = NSLayoutConstraint.Create(headingLabel, NSLayoutAttribute.Leading, NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.LeadingMargin, 1.0f, 0);
var topConstraint = NSLayoutConstraint.Create(headingLabel, NSLayoutAttribute.Top, NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.TopMargin, 1.0f, 0);
var trailingConstraint = NSLayoutConstraint.Create(headingLabel, NSLayoutAttribute.Trailing, NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.TrailingMargin, 1.0f, 0);
ContentView.AddConstraints(new NSLayoutConstraint[] { leadingConstraint, topConstraint, trailingConstraint });
var boxLeading = NSLayoutConstraint.Create(textBox, NSLayoutAttribute.Leading, NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.LeadingMargin, 1.0f, 0);
var boxTop = NSLayoutConstraint.Create(textBox, NSLayoutAttribute.Top, NSLayoutRelation.Equal, headingLabel, NSLayoutAttribute.Bottom, 1.0f, 4);
var boxTrailing = NSLayoutConstraint.Create(textBox, NSLayoutAttribute.Trailing, NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.TrailingMargin, 1.0f, 0);
var boxBottom = NSLayoutConstraint.Create(textBox, NSLayoutAttribute.Bottom, NSLayoutRelation.Equal, ContentView, NSLayoutAttribute.BottomMargin, 1.0f, 0);
var boxHeight = NSLayoutConstraint.Create(textBox, NSLayoutAttribute.Height, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 1.0f, 36 * MultiHeight);
ContentView.AddConstraints(new NSLayoutConstraint[] { boxLeading, boxTop, boxTrailing, boxBottom, boxHeight });
}
使用 AutoLayout 的另一个好处是:在将 TableView 的 RowHeight 设置为 UITableView.AutomaticDimension
和 EstimatedHeight 之后,如果我们设置了正确的约束,单元格将根据其内容自动计算行高。
关于c# - 如何将自定义 `UITableCell` 提供给 `UITableView`,使其具有与内置单元格相同的布局指标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50602592/
我试图在 (C) Python 源代码中找到内置 in 运算符的实现。我在内置函数源代码中搜索过,bltinmodule.c ,但找不到此运算符的实现。我在哪里可以找到这个实现? 我的目标是通过扩展此
我们正在开发一个 shell(学校项目)。我们不理解一种行为。为什么内置函数在重定向时不起作用? 喜欢 cd - | command 不改变目录。 或 export NAME=VALUE | comm
有人问有关如何对列表进行排序的问题。从基本List.Sort()到List.OrderBy()有几种方法。最可笑的是自己动手的SelectionSort。我迅速将其否决,但这使我思考。应用于列表的
我正在尝试使用 C 中内置的 qsort 函数对结构进行排序 typedef struct abc{ long long int fir; long long int sec; }abc; 在
我觉得有一些内置的东西。如果对象为空,我想要默认值(或者特别是 0,我只使用十进制/整数)。是否有编写此函数的内置方法? static int GetDecimalFromObject(object
Java 是否有用于生成和解析文档的内置 XML 库?如果不是,我应该使用哪个第三方? 最佳答案 Sun Java 运行时附带 Xerces 和 Xalan 实现,它们提供解析 XML(通过 DOM
我对 python 的“all”和生成器有以下问题: G = (a for a in [0,1]) all(list(G)) # returns False - as I expected 但是:
我有一些使用 gcc 内部函数的代码。我想包含代码以防缺少内在函数。我该怎么做? #ifdef __builtin_ctzll 不起作用。 最佳答案 使用最新版本的 clang,现在可以使用 __ha
人们常说应该在本地重新声明(某些)Lua 函数,因为这样可以减少开销。但这背后的确切规则/原则是什么?我怎么知道哪些功能应该完成,哪些是多余的?还是应该为每个功能完成,甚至是您自己的功能? 不幸的是,
我想实现以下功能: TestClass values 接受任意数量的 NewClass 对象 只有 NewClass 对象没有完全相同的属性值被添加到TestClass.values 我想出了这个:
我正在尝试编写一个存储过程(使用 SQL Server Management Studio 2008 R2)以从表中检索最大测量值。这似乎是一件容易的事,所以我写了一个简短的存储过程来获取 MAX。但
我刚写了我的第一个Electron应用程序。现在,我正在尝试通过electron-packager构建它。我的package.json看起来像这样: { "name": "pixelcast",
我正在寻找在 WPF 应用程序中使用的“安全”字体系列列表 - 应该安装在所有能够运行 WPF 的客户端机器上的字体系列。 Silverlight 有一个明确定义的列表( listed on MSDN
好吧,(在写了几次之后)发现System.Windows.Controls命名空间中已经有一个BooleanToVisibilityConverter,这真是一个惊喜。 可能还有更多这样隐藏的节省时间
在我的 gradle 构建文件中,我有以下插件 block plugins { `java-library` jacoco checkstyle } 这些都没有指定版本,但一切
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 3 年前。 Improve this ques
10 implementations String#reverse 已根据每个浏览器进行分析。 自 2011 年以来已对这些实现进行了解释。 当 ES6 出现时,有很多代码变得更加优雅和性能。 关于
在 Julia 包 BenchmarkTools 中,有一些像 @btime、@belapse 这样的宏对我来说似乎是多余的,因为 Julia 内置了@time、@elapse 宏。在我看来,这些宏服
我正在尝试编写一个简单的 LLVM 通行证,其目标如下: 查找所有 call指示。 在被调用函数中插入我编写的外部函数。 例如,考虑我有以下示例程序: #include #include int
我理解 'a) -> (rhs:'a -> 'a) -> 'a 在我感兴趣的情况下,我经常发现自己想要类似 (lhs:'a -> 'b) -> (rhs:'c -> 'b) -> 'b 的东西在侧面
我是一名优秀的程序员,十分优秀!