到目前为止,我一直只是在单元格中使用自动调整大小的文本标签.我通常将约束放在所有边(内容视图或邻居)上,并将以下行添加到我的viewDidLoad():
// 190.0 is the actual height of my custom cell (see next image) in the storyboard containing a label and a randomly sized UIImageView
tableView.estimatedRowHeight = 190.0
tableView.rowHeight = UITableViewAutomaticDimension
Run Code Online (Sandbox Code Playgroud)
现在,当试图包含图像时,我遇到了几个问题.在一些研究中,我发现了几种用Objective-C编写的方法,但是我不确定哪些方法真正解决了我的核心问题,我仍在努力解决复杂的Objective-C代码问题.所以要恢复:我的最终目标是获得一个具有正确大小(正确的高度)单元格的表格,每个单元格包含一个符合屏幕宽度的标题和图像.那些图像可以具有不同的纵横比和不同的尺寸.为了简化一些挑战,我准备了一个新的,更简单的项目:
UITableViewController和一个CustomCell类具有两个IBOutlets title: String和postedImage: UIImage(随机的UIImage在故事板的尺寸)来配置所述细胞.我定义了边缘和彼此的约束.

在我的一个更复杂的项目中,我想要不同的图像自动适应屏幕的宽度,无论它们是纵向还是横向 - 如果它们的宽度小于屏幕的宽度,它们应该按比例放大.与上面的项目一样,每个单元格高度应符合故事板中约束所定义的各个内容.无论如何,它从上面讨论的问题开始:我怎样才能让这两个单元格具有相同的正确高度,拥抱故事板中定义的内容?
万分感谢您的帮助!
事先我不得不说我实际上得到了我想要的可见效果,但不是令人满意的方式,因为现在,约束需要被"打破"而不是正确更新.
我有一个ViewController,它包含一个UITableView.它的高度tableView可以从0(不可见)到它所拥有的行数不等.通过将当前行数乘以行的高度,在ViewController的viewDidLoad()中计算高度.
我尝试的第一件事是创建一个@IBOutlet weak var tableHeightConstraint: NSLayoutConstraint!连接到故事板中设置的高度约束.它只有一些随机的初始高度,但它在ViewController中更新为正确的值,viewDidLoad()然后是在需要时更新视图的方法:
tableHeightConstraint = NSLayoutConstraint(item: tableView, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 0, constant: calculatedTableViewHeight)
// At this point I've tried a variety of methods like the following two but actually none has worked for me
view.layoutIfNeeded()
// or
view.updateConstraints()
// or
view.layoutSubviews()
Run Code Online (Sandbox Code Playgroud)
...甚至在tableView上的相同方法只是为了确保以及将所有这些放入其中viewDidLayoutSubviews().
所以我接下来尝试的是创建与上面相同的约束,但不是更新我只是将它添加到视图中:view.addConstraint(tableHeightConstraint).这实际上具有所需的视觉效果,但在日志中我遇到了这两个高度限制的冲突,导致最初的一个突破.我的目标是获得正确而干净的代码,我一直在努力.所以这次我首先从视图中删除了约束,然后再次添加调整后的约束.从视觉上看,一切都很完美,但我仍然没有摆脱相互冲突的限制.
所以我的实际问题是(除了我到目前为止做错了)我怎么能 - 最好 - 只需更新一个现有的约束,然后在任何时候对视图及其子视图进行适当的更新/重新布局,无论是在我第一次加载时一个视图或我是否只想在用户交互时更改一些约束.非常感谢您的帮助!
我创建并发布了一个私有的 Github 包。首先尝试用纱线安装它,我面临以下问题:
无论我尝试使用 yarn 还是 npm,它都无法找到包,尽管遵循 Github 记录的确切步骤(https://help.github.com/en/github/managing-packages-with-github-package-registry/配置 npm-for-use-with-github-package-registry)。
我的.yarnrc:
registry "https://npm.pkg.github.com/OWNER"
使用yarn,它会不断尝试查找包https://registry.yarnpkg.com/@GITHUB_USERNAME而不是我在上面输入的注册表。
备注:在.yarnrc注册表中需要按照稍微不同的语法添加:
registry "https://npm.pkg.github.com/"
到目前为止,我也开始尝试混合.npmrc和.yarnrc配置,但没有运气。
——
编辑(部分解决)
我想出了如何使用 npm 或 - 在我的情况下 - 纱线来实际访问包。现在我遇到了Request failed \"401 Unauthorized\"错误的问题,尽管我在上面添加了凭据.yarnrc:
//npm.pkg.github.com/:_authToken=AUTH_TOKEN
在里面做同样的.npmrc事情也行不通。
我一直在努力,但我只是不明白.我对编程很陌生,所以几乎每一个新步骤都是一个实验.虽然在没有参数/返回的情况下调度普通闭包没有问题,但到目前为止我还没有理解如何处理带有(多个)参数并最终返回的函数.
为了获得正确的"解决方案"的逻辑,如果有人能够发布一个实际的例子,那将是很好的,所以我可以看到我是否已经完全正确.我会非常感谢任何帮助...如果其他一些实际例子以更好的方式说明了这个话题,请继续自己做!
假设我们想要将以下函数异步调度到具有低优先级的后台队列(或者我犯了错误,在定义函数时尝试实现调度而不是等到从其他地方调用它?!):
func mutateInt(someInt: Int) -> Int {
"someHeavyCalculations"
return result
}
Run Code Online (Sandbox Code Playgroud)
或者是一个带有多个参数的函数,它还会在某个时刻调用第一个函数(后台队列中的所有内容):
func someBadExample(someString: String, anotherInt: Int) -> Int {
"someHeavyStuff"
println(testString)
mutateInt(testInt)
return result
}
Run Code Online (Sandbox Code Playgroud)
或者应该确保在主队列上运行的UI函数(只是一个虚构的例子):
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let sectionInfo = self.fetchedResultsController.sections?[section] as NSFetchedResultsSectionInfo
return sectionInfo.numberOfObjects
}
Run Code Online (Sandbox Code Playgroud) 我正在研究一个项目,其中包括几个集成为pod的库Cocoapods- 它已经有一段时间但我认为这个错误在我集成时首先出现Cocoapods并且从那时起就没有消失(所以我开始使用真实的设备来测试我的构建).
就像我提到的,我在任何真实设备上构建都没有问题但是在iOS模拟器上构建时我经常遇到以下错误.Xcode成功完成构建并启动模拟器,然后在尝试加载构建时立即崩溃.
dyld: Symbol not found: _ACAccountTypeIdentifierTwitter
Referenced from: .../Library/Developer/CoreSimulator/Devices/28482AD6-B0F2-4FBF-B525-C1EA3F2E07FA/data/Containers/Bundle/Application/D9992D1D-FE14-4403-A9DC-E5C1BB787E9E/projectName.app/projectName
Expected in: flat namespace
in .../Library/Developer/CoreSimulator/Devices/28482AD6-B0F2-4FBF-B525-C1EA3F2E07FA/data/Containers/Bundle/Application/D9992D1D-FE14-4403-A9DC-E5C1BB787E9E/projectName.app/projectName
(lldb)
Run Code Online (Sandbox Code Playgroud)
我对更改链接选项持谨慎态度,因为当我首先遇到这个问题时,它也影响了Xcode本身的构建,然后由于一些难以理解的错误而一次又一次地失败.此外,我没有使用任何Twitter特定的代码,它似乎只是一个集成库的一部分.
任何帮助都非常感谢,因为我非常希望能够再次在模拟器上构建!
编辑1
编辑2
dyld`_dyld_start:
0x7fff6431d000 <+0>: popq %rdi
0x7fff6431d001 <+1>: pushq $0x0
0x7fff6431d003 <+3>: movq %rsp, %rbp
0x7fff6431d006 <+6>: andq $-0x10, %rsp
0x7fff6431d00a <+10>: subq $0x10, %rsp
0x7fff6431d00e <+14>: movl 0x8(%rbp), %esi
0x7fff6431d011 <+17>: leaq 0x10(%rbp), %rdx
0x7fff6431d015 <+21>: movq 0x37aec(%rip), %r8 ; _dyld_start_static
0x7fff6431d01c <+28>: leaq -0x23(%rip), %rcx ; <+0>
0x7fff6431d023 <+35>: subq %r8, %rcx
0x7fff6431d026 …Run Code Online (Sandbox Code Playgroud) 我尝试建立各种可以协同工作的协议。不幸的是,我无法让它们按照我想要的方式工作。看下面的代码,我认为我的目标很明显:我想要求一个符合协议X的类。如果它符合协议Y,但协议Y继承自协议X,则它也应被视为一个符合性的类。 。相反,我收到以下编译错误
Unable to infer associated type 'VC' for protocol 'ViewModelType'
Inferred type 'ExampleViewControllerType' (by matching requirement 'viewController') is invalid: does not conform to 'ViewType'
当前设置:
protocol ViewModelType: class {
associatedtype VC: ViewType
weak var viewController: VC! { get set }
}
class ExampleViewModel: ViewModelType {
weak var viewController: ExampleViewControllerType!
}
protocol ViewType: class { }
protocol ExampleViewControllerType: ViewType { }
class ExampleViewController: UIViewController, ExampleViewControllerType {
}
Run Code Online (Sandbox Code Playgroud) 我正在开发 PWA(VueJS/Quasar),并且在一段时间后重新打开应用程序(保存在主屏幕上)时,有时会遇到以下错误。
黑屏: A problem repeatedly occurred on "https://..."
我发现了一些提示(内存/性能、css 问题)和相关问题(例如iOS safari 崩溃(重复出现的问题)),但我还没有完全理解如何追踪该问题。
mobile-safari reactjs vue.js progressive-web-apps quasar-framework
如何将UITableViewRowAction的标题字符串分成两行?...就像Apple在他们的邮件应用程序(iPhone)中做到的那样; 在电子邮件列表中向右滑动,您将看到两行写的"标记为未读"操作.
非常感谢!
用户在地图视图中.当在地图上的某个地方长按时,会触发以下函数来设置新的注释,包括正确的标题.
func action(gestureRecognizer: UIGestureRecognizer) {
if gestureRecognizer.state == UIGestureRecognizerState.Began {
var newTouch: CGPoint = gestureRecognizer.locationInView(self.mapView)
var newCoordinate: CLLocationCoordinate2D = mapView.convertPoint(newTouch, toCoordinateFromView: self.mapView)
var newLocation = CLLocation(latitude: newCoordinate.latitude, longitude: newCoordinate.longitude)
var newAnnotation = MKPointAnnotation()
newAnnotation.coordinate = newCoordinate
CLGeocoder().reverseGeocodeLocation(newLocation, completionHandler: {(placemarks, error) in
if error != nil { println(error) }
let p: CLPlacemark = placemarks[0] as CLPlacemark
var thoroughfare: String? = p.thoroughfare
var subThoroughfare: String? = p.subThoroughfare
if p.thoroughfare == nil || p.subThoroughfare == nil {
var date = NSDate()
newAnnotation.title = …Run Code Online (Sandbox Code Playgroud) swift ×5
ios ×4
autolayout ×2
ios8 ×2
uitableview ×2
cocoapods ×1
constraints ×1
function ×1
npm ×1
protocols ×1
reactjs ×1
vue.js ×1
xcode ×1
yarnpkg ×1