- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在此屏幕中,您可以添加和删除人员。并非所有字段都是必需的,因此单元格高度是动态的。
如果我先添加一个完成所有字段的人,然后添加未完成所有字段的第二个人,然后删除第一个人,则第二个人排在第一位,但布局与第一人称相同
在我删除第一个人后,如果我向上滚动直到剩余的单元格离开屏幕,它就会自行修复
这是表格源
namespace xXxx.xXxx.iOS
{
public class SiniestroParticipantesSource : MvxTableViewSource
{
private readonly SiniestroParticipantesViewModel viewModel;
public SiniestroParticipantesSource(UITableView tableView, SiniestroParticipantesViewModel viewModel)
: base(tableView)
{
this.UseAnimations = true;
this.AddAnimation = UITableViewRowAnimation.Top;
this.RemoveAnimation = UITableViewRowAnimation.Middle;
this.viewModel = viewModel;
tableView.RegisterNibForCellReuse(UINib.FromName(PersonaDenunciaCellView.Key, NSBundle.MainBundle), PersonaDenunciaCellView.Key);
}
public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
tableView.DeselectRow(indexPath, true);
var itemPersona = this.viewModel.Personas[indexPath.Section];
this.viewModel.AgregarCommand.Execute(itemPersona);
}
protected override UITableViewCell GetOrCreateCellFor(UITableView tableView, NSIndexPath indexPath, object item)
{
var cell = (PersonaDenunciaCellView)tableView.DequeueReusableCell(PersonaDenunciaCellView.Key, indexPath);
return cell;
}
public override nint RowsInSection(UITableView tableview, nint section)
{
return 1;
}
public override nint NumberOfSections(UITableView tableView)
{
return this.viewModel.Personas.Count;
}
protected override object GetItemAt(NSIndexPath indexPath)
{
return this.viewModel.Personas[indexPath.Section];
}
}
}
这是单元格 View
namespace xXxx.xXxx.iOS
{
public partial class PersonaDenunciaCellView : MvxTableViewCell
{
public static readonly NSString Key = new NSString("PersonaDenunciaCellView");
public static readonly UINib Nib;
static PersonaDenunciaCellView()
{
Nib = UINib.FromName("PersonaDenunciaCellView", NSBundle.MainBundle);
}
protected PersonaDenunciaCellView(IntPtr handle) : base(handle)
{
this.DelayBind(() =>
{
var set = this.CreateBindingSet<PersonaDenunciaCellView, PersonaDenunciaItemViewModel>();
set.Bind(btnRemove).To(vm => vm.RemoveCommand);
set.Bind(lblNombre).To(vm => vm.Persona.Persona.Nombre);
set.Bind(lblTipoDoc).To(vm => vm.Persona.Persona.TipoDoc.Descripcion);
set.Bind(tipoDocVisibilityConst).For("Priority").To(vm => vm.Persona.Persona.Nrodoc).WithConversion("iOSVisibility", true);
set.Bind(lblNrodoc).To(vm => vm.Persona.Persona.Nrodoc);
set.Bind(nroDocVisibilityConst).For("Priority").To(vm => vm.Persona.Persona.Nrodoc).WithConversion("iOSVisibility", true);
set.Bind(lblMailContacto).To(vm => vm.Persona.MailContacto);
set.Bind(mailContactoVisibilityConst).For("Priority").To(vm => vm.Persona.MailContacto).WithConversion("iOSVisibility", true);
set.Bind(lblTelContacto).To(vm => vm.Persona.TelContacto);
set.Bind(telContactoVisibilityConst).For("Priority").To(vm => vm.Persona.TelContacto).WithConversion("iOSVisibility", true);
set.Bind(lblLesionado).To(vm => vm.Persona.Lesionado).WithConversion("Lesionado");
set.Bind(vehiculoVisibilityConst).For("Priority").To(vm => vm.Persona.Patente).WithConversion("iOSVisibility", true);
set.Bind(viewVehiculo).For("Visibility").To(vm => vm.Persona.Patente).WithConversion("Visibility");
set.Bind(lblPatente).To(vm => vm.Persona.Patente);
set.Bind(lblCiaSeguroDesc).To(vm => vm.Persona.CiaSeguroDesc);
set.Apply();
});
}
}
}
单元格 View 模型
namespace xXxx.xXxx.Core.ViewModels.Items
{
public class PersonaDenunciaItemViewModel:MvxViewModel
{
private readonly IMvxMessenger messenger;
private readonly IUserInteraction userInteraction;
public string Index { get; set; }
public PersonaDenunciaItemViewModel (SiniestroCarga.PersonaDenuncia persona, IMvxMessenger messenger, IUserInteraction userInteraction, string index)
{
this.messenger = messenger;
this.userInteraction = userInteraction;
this.Persona = persona;
this.Index = index;
}
private SiniestroCarga.PersonaDenuncia persona;
public SiniestroCarga.PersonaDenuncia Persona
{
get
{
return this.persona;
}
set
{
this.persona = value;
this.RaisePropertyChanged(() => this.Persona);
}
}
private ICommand removeCommand;
public ICommand RemoveCommand
{
get
{
return this.removeCommand = this.removeCommand ?? new MvxCommand(this.RemovePersona);
}
}
private void RemovePersona()
{
this.userInteraction.Confirm("Are you sure?", () =>
{
this.messenger.Publish(new RemovePersonaDenunciaMessage(this, this.Persona, this.Index));
}, null, "OK", "Cancel");
}
}
}
最后一个 messenger.Publish 在另一个 ViewModel 上订阅了这个
OnRemovePersonaDenuncia = message =>
{
var listPersonas = new ObservableCollection<PersonaDenunciaItemViewModel>(this.Personas);
listPersonas.Remove(this.Personas.First(p => p.Index == message.Index));
this.Personas = listPersonas;
}
将 RemoveCommand 的实现更改为此
this.Personas.Remove(this.Personas.First(p => p.Index == message.Index));
使得当我按下删除按钮时,模拟器关闭而没有任何错误。 Xamarin Studio 上的应用程序跟踪显示了这一点
*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.60.7/UITableView.m:1700
最佳答案
当内容高度为动态时,iOS 无法正确计算单元格的高度。这很烦人,但您可以覆盖 SiniestroParticipantesSource
中的 GetHeightForRow
和 EstimatedHeight
以根据数据计算每个单元格的确切高度:
public override nfloat EstimatedHeight(UITableView tableView, NSIndexPath indexPath) =>
GetHeightForRow(tableView, indexPath);
public override nfloat GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
{
var data = (PersonaDenunciaItemViewModel)ItemsSource.ElementAt(indexPath.Row);
var cell = (PersonaDenunciaCellView)tableView.DequeueReusableCell(PersonaDenunciaCellView.Key, indexPath);
// TODO set the cell data manually (ignoring bindings)
// i.e: **cell.lblNombre = data.Persona.Persona.Nombre**; // and every other field required
cell.SetNeedsLayout();
cell.LayoutIfNeeded();
var size = cell.ContentView.SystemLayoutSizeFittingSize(UIView.UILayoutFittingCompressedSize);
return NMath.Ceiling(size.Height) + 1;
}
这是一个 example使用完全相同的代码。
关于ios - 我有两个高度不同的单元格。当我删除第一个时,第二个获得第一个的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39355751/
我已经尝试在我的 CSS 中添加一个元素来删除每三个 div 的 margin-right。不过,似乎只是出于某种原因影响了第 3 次和第 7 次。需要它在第 3、6、9 等日工作... CSS .s
如何使 div/input 闪烁或“脉冲”?例如,假设表单字段输入了无效值? 最佳答案 使用 CSS3 类似 on this page ,您可以将脉冲效果添加到名为 error 的类中: @-webk
我目前正在尝试构建一个简单的 wireframe来自 lattice 的情节包,但由沿 y 轴的数百个点组成。这导致绘图被线框网格淹没,您看到的只是一个黑色块。我知道我可以用 col=FALSE 完全
在知道 parent>div CSS 选择器在 IE 中无法识别后,我重新编码我的 CSS 样式,例如: div#bodyMain div#paneLeft>div{/*styles here*/}
我有两个 div,一个在另一个里面。当我将鼠标悬停 到最外面的那个时,我想改变它的颜色,没问题。但是,当我将鼠标悬停 到内部时,我只想更改它的颜色。这可能吗?换句话说,当 将鼠标悬停到内部 div 上
我需要展示这样的东西 有人可以帮忙吗?我可以实现以下输出 我正在使用以下代码:: GridView.builder( scrollDirection: Axis.vertical,
当 Bottom Sheet 像 Android 键盘一样打开时,是否有任何方法可以手动上推布局( ScrollView 或回收器 View 或整个 Activity )?或者你可以说我想以 Bott
我有以下代码,用于使用纯 HTML 和 CSS 显示翻转。当您将鼠标悬停在文本上时,它会更改左右图像。 在我测试的所有浏览器中都运行良好,Safari 4 除外。据我收集的信息,Safari 4 支持
我构建了某种 CMS,但在使用 TinyMCE 和 Bootstrap 时遇到了一些问题。 我有一个页面,其中概述了一个 div,如果用户单击该 div,他们可以从模态中选择图像。该图像被插入到一个
出于某种原因,当我设置一个过渡时,当我的鼠标悬停在一个元素上时,背景会改变颜色,它只适用于一个元素,但它们都共享同一个类?任何帮助我的 CSS .outer_ad { position:rel
好吧,这真的很愚蠢。我不知道 Android Studio 中的调试监视框架发生了什么。我有 1.5.1 的工作室。 是否有一些来自 intellij 的 secret 知识来展示它。 最佳答案 与以
我有这个标记: some code > 我正在尝试获取此布局: 注意:上一个和下一个按钮靠近#player 我正在尝试这样: .nextBtn{
网站:http://avuedesigns.com/index 首页有 6 个菜单项。我希望每件元素在您经过时都有自己的颜色。 这是当您将鼠标悬停在 div 上时将所有内容更改为白色的行 li#hom
我需要在 index.php 文件中显示它,但没有任何效果。我所有的文章都没有正确定位。我将其用作代码: 最佳答案 您可以首先检查您
我是一名优秀的程序员,十分优秀!